Java Swing - 如何更新GUI对象,即。来自同一包中的子类的JTextField值

时间:2011-12-01 18:30:15

标签: java swing listener jcombobox jtextfield

我在Swing中设计了一个GUI,其中包含了所有组件。例如,我有一个带有JList和JTextField的JComboBox,

当我从JComboBox中选择一个不同的项时,我试图使用ListSelectionListener来调用子类中的方法,以根据选择更新JTextField,

我该如何正确地做到这一点?如何调用子类,然后从子类更新GUI对象的值?

3 个答案:

答案 0 :(得分:1)

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();
    }
    // ...
}

答案 1 :(得分:1)

我希望我能解决你的问题。您有一个包含多个子视图的视图组件,并且您希望更新一个子视图,因为在另一个子视图中进行了更改。

因此,您在主视图中为组合框编写了一个动作侦听器:

comboBox.addActionListener(new ActionListener(){

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

        });

答案 2 :(得分:1)

我建议应用Mediator pattern而不是直接互连组件: 创建JPanel的子类(例如XyzPane),放置所有组件。此类成为Mediator。它

  • 侦听其组件的事件
  • 根据需要更新组件
  • 如果需要,
  • 触发自己的事件(这允许它成为父Mediator的一部分:在Panes中对组件进行分组,然后嵌套窗格)