У меня есть, например, 10 кнопок в моем кадре. Могу ли я использовать уникальный прослушиватель действий для всех из них? Я имею в виду не определять слушателя для каждого из них, кроме одного слушателя для всех. , пожалуйста, приведи пример. благодаряИспользуйте один прослушиватель действий для всех кнопок
ответ
да, конечно, вы можете
class myActionListener implements ActionListener {
...
public void actionPerformed(ActionEvent e) {
// your handle button click code
}
}
и в JFrame
myActionListener listener = new myActionListener();
button1.addActionListener(listener);
button2.addActionListener(listener);
button3.addActionListener(listener);
и так далее
// Create your buttons.
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
// ...
// Create the action listener to add to your buttons.
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Execute whatever should happen on button click.
}
}
// Add the action listener to your buttons.
button1.addActionListener(actionListener);
button2.addActionListener(actionListener);
button3.addActionListener(actionListener);
// ...
Вы можете сделать это, в методе actionPerformed
получить команду действий и для каждой кнопки Задать команду Действие
ActionListener al_button1 = new ActionListner(){
@Override
public void actionPerformed(ActionEvent e){
String action = e.getActionCommand();
if (action.equals("button1Command")){
//do button 1 command
} else if (action.equals("button2Command")){
//do button 2 command
}
//...
}
}
//add listener to the buttons
button1.addActionListener(al_buttons)
button2.addActionListener(al_buttons)
// set actioncommand for buttons
button1.setActionCommand("button1Command");
button2.setActionCommand("button2Command");
Вы могли бы это сделать, но тогда вам придется Де- мультиплексировать все эти вызовы, идущие к «одному контроллеру», который управляет ими всеми, если у вас нет уникального обстоятельства, когда все кнопки должны делать то же самое.
Это демультиплексирование, вероятно, связано с коммутатором (или, что еще хуже, связью операторов if/then), и этот коммутатор станет головной болью обслуживания. См. examples of how this could be bad here.
Проверьте source
на ActionEvent
, и сделать проверку равенства в отношении каждого из ваши кнопки, чтобы увидеть, что вызвало ActionEvent
. Затем вы можете использовать свой единственный слушатель для всех кнопок.
final JButton button1 = new JButton();
final JButton button2 = new JButton();
ActionListener l = new ActionListener() {
public void actionPerformed(final ActionEvent e) {
if (e.getSource() == button1) {
// do button1 action
} else if (e.getSource() == button2) {
// do button2 action
}
}
};
button1.addActionListener(l);
button2.addActionListener(l);
- 1. Один прослушиватель - Несколько кнопок
- 2. Как зарегистрировать один прослушиватель событий для всех кнопок
- 3. Определить прослушиватель действий в пользовательском классе кнопок
- 4. ActionListeners: для каждой кнопки в графическом интерфейсе отдельный прослушиватель или один прослушиватель для всех кнопок?
- 5. Используйте один редуктор Redux для всех действий CRUD?
- 6. Используйте панель инструментов для всех действий (Android)
- 7. Как добавить общий прослушиватель для всех кнопок (нет навязчивых)?
- 8. Используйте один код jquery для всех вкладок
- 9. Как добавить прослушиватель действий, который прослушивает несколько кнопок
- 10. Android onOptionsItemSelected (...) прослушиватель для всех видов деятельности
- 11. onLongClick прослушиватель для группы кнопок в Android
- 12. Как удалить прослушиватель действий?
- 13. Пустой прослушиватель кнопок
- 14. CKEditor 'Source' прослушиватель кнопок
- 15. прослушиватель действий для JDialog для нажатой кнопки
- 16. Обычный приемник действий для 3 кнопок
- 17. Один прослушиватель для ВСЕХ событий в пространстве имен событий jQuery?
- 18. Один прослушиватель кликов для всех представлений в иерархии?
- 19. один прослушиватель для всех дочерних элементов в дереве DOM
- 20. Используйте один вход как значение для двух кнопок
- 21. onclick прослушиватель в android для кнопок
- 22. Попытка реализовать прослушиватель действий для карточной игры
- 23. Вызов eventReactive для произвольного количества кнопок действий
- 24. Array и прослушиватель действий java
- 25. Перенаправление для всех контроллеров действий
- 26. Изменение действий кнопок
- 27. функция PHP срабатывает для всех кнопок, а не один
- 28. Возможно ли иметь один GestureDetector для ВСЕХ действий?
- 29. Несколько кнопок swt, тот же прослушиватель
- 30. Один скрипт для нескольких кнопок
Это возможно ... но вам нужно будет использовать блок 'switch' или кучу блоков' if-then-else', чтобы выполнить код, соответствующий этой кнопке. Это решение является хрупким, трудноподдерживаемым и трудночитаемым. Кроме того, он не дает преимуществ в производительности. Нет никакой веской причины использовать этот шаблон. Идеальная идея - единственный метод или один функциональный объект для каждой кнопки. Одно из возможных исключений было бы, если бы все кнопки выполняли один и тот же код, но даже тогда было бы лучше реализовать общий код в частном вспомогательном методе. – scottb
«да» на первый вопрос, «попробуй и возвращайся с любыми проблемами» для второго. –