addMouseListener или addActionListener или JButton? - PullRequest
6 голосов
/ 01 сентября 2010

При определении поведения простого щелчка на кнопке JButton, какой правильный способ сделать это? И какая разница?

JButton but = new JButton();
but.addActionListener(new ActionListener() {          
    public void actionPerformed(ActionEvent e) {
         System.out.println("You clicked the button, using an ActionListener");
    }
}); 

или

JButton but = new JButton();
but.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        System.out.println("You clicked the button, using a MouseListenr");
    }
});

Ответы [ 4 ]

6 голосов
/ 01 сентября 2010

MouseListener - это низкоуровневый слушатель событий в Swing (и, кстати, AWT).

ActionListener - это более высокий уровень, и его следует использовать.

Лучше, чем ActionListener хотя, следует использовать javax.swing.Action (что на самом деле ActionListener).

Использование Action позволяет разделить его между несколькими виджетами (например, JButton, JMenuItem ...);вы не только делитесь кодом, который запускается при нажатии кнопки / меню, но и общим состоянием, в частности тем, включено ли действие (и связанные с ним виджеты) или нет.

1 голос
/ 01 сентября 2010

Вы должны быть в состоянии нажать эту кнопку также с помощью клавиатуры.Таким образом, если вы добавите только прослушиватель мыши, вы не получите событие «нажатия» при использовании клавиатуры.

Я бы пошел на слушателя действия, это более понятно.

0 голосов
/ 16 марта 2012

Если вы хотите что-то сделать, когда нажата кнопка J, кнопка прослушивания действий лучше, потому что слушатель мыши не распознает, что мышь нажимается на кнопку, если пользователь нажимает кнопку мыши на кнопке J, а затем немного перемещает мышьперед отпусканием кнопки мыши, оставаясь в пределах кнопки все время, но слушатель действия делает.MouseListener требует, чтобы щелчки мыши не перемещались между нажатием и отпусканием мыши, что не относится к моим пользователям.

0 голосов
/ 01 сентября 2010

Зарегистрированный ActionListener вызывается, когда кнопка запускает событие Action, MouseListener вызывается, когда виджет обнаруживает щелчок мыши.

В вашем примере оба подхода показывают одинаковое поведение, когда вы нажимаете кнопку мыши. Но сфокусируйтесь на кнопке и нажмите SPACE, это должно вызвать событие действия и вызвать прослушиватель действий, но не прослушиватель мыши.

Желательно использовать ActionListener для кнопок, в противном случае вы не сможете управлять приложением с помощью клавиатуры или вам потребуется добавить еще один обработчик событий клавиш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...