你需要减少这些对象之间的耦合。
您可以拥有一个拥有所有文本字段和按钮的主对象(面板无关紧要)
然后是该主对象中的一个单独的 actionlistener(我称它为中介者,见中介者模式)
该动作侦听器在中介上执行一个方法,该方法反过来从文本字段中获取值并可能创建一个传输对象。
通过这种方式,您可以减少面板、文本字段等之间的耦合,并将控件放在一个地方(中介),也就是说,您不会让它们彼此认识。
你可以看看这个问题中的代码:
https ://stackoverflow.com/questions/324554/#324559
它在运行代码中显示了这些概念。
顺便说一句,观察者模式已经在 JTextField、JButton、ActionListener 等中实现。您只需要添加钩子。
我希望这有帮助。
编辑将两个答案合二为一。
这是代码。
class App { // this is the mediator
// GUI components.
private JFrame frame;
private JTextField name;
private JTextField count;
private JTextField date;
// Result is displayed here.
private JTextArea textArea;
// Fired by this button.
private JButton go;
private ActionListener actionListener;
public App(){
actionListener = new ActionListener(){
public void actionPerformed( ActionEvent e ){
okButtonPressed();
}
};
}
private void okButtonPressed(){
// template is an object irrelevant to this code.
template.setData( getData() );
textArea.setText( template.getTransformedData() );
}
public void initialize(){
frame = new JFrame("Code challenge v0.1");
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
name = new JTextField();
count = new JTextField();
date = new JTextField();
textArea = new JTextArea();
go = new JButton("Go");
go.addActionListener( actionListener ); // prepare the button.
layoutComponents(); // a lot of panels are created here. Irrelevant.
}
}
可以在此处检索完整且正在运行的代码:
在可能的情况下,优先考虑组合而不是继承是很重要的。