Вы можете использовать один класс, но это не очень хороший dsign, потому что вам необходимо применить принцип разделения проблем. Вы хотите согласованности в классе, чтобы методы были значимыми и логичными в соответствии с бизнес-доменом, с которым вы имеете дело. Также в некоторых случаях один и тот же прослушиватель действий может обрабатывать множество кнопок.
Пример: предполагается, что я строю калькулятор. Я знаю, что поведение операторов аналогично, когда их нажимают. И так с кнопками цифр. Поэтому я могу иметь некоторые классы, скажем
public class OperationActionListener {
public void actionPerformed(ActionEvent e) {
// Handle what happens when the user click on +, -, * and/buttons
}
}
public class DigitActionListener {
public void actionPerformed(ActionEvent e) {
// Handle what happens when the user click on a digit button
}
}
т.д.
Теперь в моем пользовательском интерфейсе Добавит экземпляр одного и тот же слушатель действия
JButton buttonPlus = new JButton("+")
JButton buttonMinus = new JButton("-");
...
JButton buttonOne = new JButton("1");
JButton buttonTwo = new JButton("2");
...
OperationActionListener operationListener = new OperationActionListener();
DigitActionListener digitListener = new DigitsActionListener();
buttonPlus.addActionListener(operationListener);
buttonMinus.addActionListener(operationListener);
....
buttonOne.addActionListener(digitListener);
buttonTwo.addActionListener(digitListener);
....
Надеется, что это помогает.
Вы смотрели в лямбда-выражения? Они являются альтернативой досадным классам для функциональных интерфейсов (интерфейсы только с одним методом). –
В общем, да, это хорошая идея иметь отдельный прослушиватель действий для каждого JButton. Однако, если группа JButtons логически сгруппирована, например, 3 x 3 сетки JButtons для игры с тик-таковыми, то имеет смысл иметь один прослушиватель действий для группы JButtons. –