Вам необходимо уменьшить связь между этими объектами.
У вас может быть главный объект, которому принадлежат все текстовые поля и кнопка (панели не имеют значения)
Затем отдельный мастер действий в этом главном объекте (я называю его медиатором, см. Образец медиатора)
Этот слушатель действия выполняет метод посредника, который, в свою очередь, берет значения из текстовых полей и, возможно, создает объект передачи.
Таким образом вы уменьшаете связь между панелями, текстовыми полями и т. Д. И позволяете элементу управления в одном месте (посреднике), то есть вы не позволяете им узнать друг друга.
Вы можете взглянуть на код в этом вопросе:
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.
}
}
Полный и работающий код можно получить здесь:
Важно отдавать предпочтение композиции, а не наследованию, когда это возможно.