Java Swing - как обновить объекты GUI т.е.Значение JTextField из подкласса в том же пакете - PullRequest
1 голос
/ 01 декабря 2011

У меня есть графический интерфейс, разработанный на Swing, со всеми компонентами.Например, у меня есть JComboBox с JList и JTextField,

Когда я выбираю другой элемент из JComboBox, я пытаюсь использовать ListSelectionListener для вызова метода в подклассе для обновления JTextField на основе выбора

Как бы я поступил правильно?Как мне вызвать подкласс и затем из подкласса обновить значение объекта GUI?

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Надеюсь, я правильно понял вашу проблему. У вас есть компонент просмотра с несколькими подпредставлениями, и вы хотите обновить одно из-за изменений, внесенных внутри другого.

Поэтому вы пишете слушатель действия для вашего комбобокса в главном представлении:

comboBox.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                textField.setText(comboBox.getSelectedItem());
            }

        });
1 голос
/ 01 декабря 2011

Вместо непосредственного соединения компонентов, я рекомендую применить шаблон Mediator : создать подкласс JPanel (например, XyzPane), в который вы поместите все свои компоненты. Этот класс становится Mediator.

  • прослушивает события своих компонентов
  • обновляет компоненты по мере необходимости
  • запускает собственные события, если необходимо (это позволяет ему быть частьюродительский посредник: группировка компонентов в панелях и последующее вложение панелей)
1 голос
/ 01 декабря 2011
public class Parent {

    private void init() {
        // ...
        combo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object selected = combo.getSelectedItem();
                textField.setText(getTextBasedOnSelection(selected));
            }
        });
        // ...
    }

    /**
     * Returns the text to display when the given object is selected.
     * Subclasses may override this method to display what they want
     */
    protected String getTextBasedOnSelection(Object selected) {
        return selected.toString();
    }
    // ...
}
...