2015-07-21 2 views
0

Итак, мне было интересно, какое лучшее решение/какие отличия и что задуматься, когда принимаете решение о создании нескольких слушателей (1 прослушиватель для 1 кнопки) или только 1 ActionListener для всех кнопок в моем графическом интерфейсе (около 10 кнопок) и получения информации о том, какая кнопка была нажата через actionevent.getSource() == buttonname.ActionListeners: для каждой кнопки в графическом интерфейсе отдельный прослушиватель или один прослушиватель для всех кнопок?

Какой, по вашему мнению, лучший стиль? Есть ли недостаток в создании стольких классов для нескольких ActionListeners? Или это вообще не имеет значения?

Кстати, в моем коде я пытаюсь придерживаться организации диспетчера модели.

+0

Смотри здесь [MVC Java: Как набор контроллеров слушателей детских классов View] (HTTP: // StackOverflow. com/questions/20027887/mvc-java-how-do-a-controller-set-listeners-to-the-children-classes-of-a-view) также выглядят [здесь] (http: //codereview.stackexchange. com/questions/48915/mvc-layout-which-way-to-add-listeners-is-better) –

+2

Придерживайтесь принципа единой ответственности: один слушатель = одна кнопка. Вам действительно не нужен метод длиной в 3 страницы, содержащий цепочку if/else if. –

ответ

1

Я предпочитаю иметь разные классы ActionListener, но группировка их по функциональной ответственности является хорошей практикой в ​​моем опыте.

Я также предлагаю вам полагаться на ActionEvent#getActionCommand() над ActionEvent#getSource(), потому что вы можете обрабатывать эквивалентное действие с разных компонентов пользовательского интерфейса.

0
JButton button = new JButton("Button"); 
button.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
    //do your work here. 
    } 
}); 

Это путь для каждой кнопки.

Объект интерфейса с длинными объектами ActionListener с несколькими операторами if или switch являются неуклюжими и сложными в обслуживании. Кроме того, на каждой кнопке нажмите, чтобы программа провела несколько совпадений, чтобы узнать, какая кнопка была нажата. Это очень дорого.

Итак, один Button ---> один ActionListener - лучший способ.

0

Я предпочитаю использовать лямбды, по одному на каждую кнопку, например:

JButton button = new JButton("Button"); 
button.addActionListener(e -> //do your work here); 
Смежные вопросы