我有一个Swing中设计的图形用户界面,其中列出了所有组件。例如我有一个JComboBox与JList和JTextField,Java Swing - 如何更新GUI对象,即。来自同一包中子类的JTextField值
当我从JComboBox中选择不同的项目我试图使用ListSelectionListener调用子类中的方法更新基于选择的JTextField,
我该如何去正确地做到这一点?如何调用子类,然后从子类更新GUI对象的值?
我有一个Swing中设计的图形用户界面,其中列出了所有组件。例如我有一个JComboBox与JList和JTextField,Java Swing - 如何更新GUI对象,即。来自同一包中子类的JTextField值
当我从JComboBox中选择不同的项目我试图使用ListSelectionListener调用子类中的方法更新基于选择的JTextField,
我该如何去正确地做到这一点?如何调用子类,然后从子类更新GUI对象的值?
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();
}
// ...
}
我希望我的问题正确。你有一个包含多个子视图的视图组件,并且你想更新一个视图组件,因为在另一个子视图内完成了更改。
因此,你写一个动作监听你的组合框在主视图:
comboBox.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
textField.setText(comboBox.getSelectedItem());
}
});
而是相互连接的部件直接,我建议应用Mediator pattern: 创建JPanel的一个子类(如XyzPane)你把所有的组件都放进去了。这个班级成为调解员。它
@trashgod:感谢您的链接。但是,也许我并不是指维基百科示例中所示的严格意义上的中介模式。而非Anthea或JB Nizet所示的示例:组合框和textField不直接连接,只能通过父级注册的侦听器间接连接。 – Puce