Можно передать JFrame в качестве параметра, и я получу поля, которые я создал? - PullRequest
1 голос
/ 21 мая 2011

К примеру, я хочу взять значение из JTextField. В JFrame я могу сделать это с помощью простого txtField.getText(), но как мне передать параметр, похожий на JFrame?

static boolean validateFields(Webcrawler wc) {
    try {
        //I created the txtUrl in the original JFrame, I can take him there, 
        //but not here.
        //The code is from the JFrame is generated by Netbeans.
        wc.getTxtUrl().getText(); //<-- is something like this I want to do.
        return true;
    } catch (Exception e) {
        return false;
    }
}

Ответы [ 3 ]

1 голос
/ 21 мая 2011

Есть несколько способов сделать то, что вы хотите сделать.

1) Предоставьте текстовые поля, которые нужно проверить.например, выставить публичный TextField getUrlTextField () из вашего JFrame.Затем в вашем методе validate, который принимает JFrame, вы можете извлечь текст всех полей.

НЕ ДЕЛАЙТЕ ЭТОГО.Вы смешиваете логику проверки с представлением (JFrame).

Вместо этого вам следует использовать класс Controller, который служит посредником между вашим представлением (JFrame) и моделью, которая его проверяет.В частности, посмотрите, как платформа NetBeans выполняет свои панели параметров, используя OptionsPanelController .Это сообщение в блоге имеет хороший пример.

0 голосов
/ 21 мая 2011

Вы всегда можете передать ссылку одного объекта другому через метод или (здесь более вероятно) параметр конструктора. Вы также можете получить ссылку на окно верхнего уровня (здесь ваш JFrame) с помощью метода getWindowAncestor SwingUtitlies.

Но, как уже отмечалось в ответе здесь (+1), вы, кажется, смешиваете логику программы с пользовательским интерфейсом, и это, возможно, не то, что вы должны делать.

0 голосов
/ 21 мая 2011

Скорее всего, переменные-члены для ваших входных виджетов (например, JTextFields) являются закрытыми и, следовательно, недоступными извне. Либо объявите их общедоступными, либо напишите функции доступа для их значений. Что-то на линии (внутри вашего JFrame или класса, производного от этого JFrame, если оно создано третьей стороной:

public String getTxtFieldText () {return txtField.getText ();}
...