Вы должны уменьшить связь между этими объектами.
Вы можете иметь главный объект, которому принадлежит все текстовые поля и кнопки (панели не имеют значения)
Тогда раздельный ActionListener внутри этого главного объекта (я называю это посредник см медиаторов рисунок)
Этот прослушиватель действий выполняет метод на медиаторе, который, в свою очередь, принимает значения из текстовых полей и создает, возможно, объект передачи.
Таким образом, вы уменьшаете связь между панелями, текстовыми полями и т. Д., И пусть управление в одном месте (посреднике), то есть вы не даете им знать друг друга.
Вы можете посмотреть на код в этом вопросе: https://stackoverflow.com/questions/324554/#324559
Это показывает эти концепции в выполнении кода.
BTW шаблон наблюдателя уже реализован в JTextField, JButton, ActionListener и т. Д. Вам просто нужно добавить крючки.
Надеюсь, это поможет.
EDIT Включил два ответа в один.
Это код.
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.
}
}
Полные и работает код может быть получен here:
Важно благоприятствует состав по наследству, когда это возможно.