Передача данных через JFrames

У меня есть несколько JFrames. Используя один из них (он содержит текстовое поле), я хочу передать введенные данные в переменную в другом классе. Эта переменная используется для создания списка выбора JComboBox. Я пытаюсь передать введенные данные через JButton, но в итоге ничего не передается и JComboBox остается пустым. Мне нужно как-то обновить JComboBox или что-то в этом роде? Мой код:

...
DataBase toTable = new DataBase();
...

button.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent click) {

                toTable.data[0] = textField.getText();

                }           
});

Переменная из класса DataBase:

....
String data[] = {"","","","",""};
....

And the Main Class (it contains JComboBox):

...
DataBase data0 = new DataBase();
final JComboBox list0 = new JComboBox(data0.data);
        list0.setBounds(10, 61, 110, 22);
        contentPane.add(list0);

person user3019431    schedule 13.01.2014    source источник
comment


Ответы (1)


Это правильно. JComboBox не замечает, что вы обновили массив. Вам нужно будет использовать метод addItem или setModel JComboBox.

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent click) {
        toTable.data[0] = textField.getText();
        list0.setModel(new DefaultComboBoxModel(toTable.data));
    }           
});

Конечно, этот код не будет работать, если вы не можете ссылаться на list0 в той же области, что и ваша кнопка. Я бы рекомендовал поместить кнопку и list0 в один и тот же класс, если это возможно.

person aebabis    schedule 13.01.2014
comment
Оба элемента не обязательно должны быть в одном классе, у вас может быть геттер для каждого из них. В любом случае, я бы попытался реализовать решение, больше похожее на шаблон «Субъект-наблюдатель» из книги «Гамма», чтобы отделить все эти объекты (что произойдет, если у вас есть 3 или 4 объекта с этой схемой?) - person Jorge_B; 14.01.2014
comment
@Jorge_B Я согласен с тем, что шаблон Observer-Observable очень полезен, но, не видя больше его кода, мы не знаем, будет ли это излишним. Иногда лучше поместить всю связь в тот же класс, который строит графический интерфейс. - person aebabis; 14.01.2014