在定义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");
}
});
答案 0 :(得分:6)
MouseListener
是Swing中的低级事件侦听器(顺便说一下AWT)。
ActionListener
是更高级别的,应该使用。
优于ActionListener
,但应使用javax.swing.Action
(实际上是ActionListener
)。
使用Action
允许在多个小部件之间共享它(例如JButton
,JMenuItem
...);您不仅可以共享按下按钮/菜单时触发的代码,还可以共享状态,尤其是是否启用了操作(及其关联的小部件)。
答案 1 :(得分:1)
您也可以使用键盘按下该按钮。因此,如果只添加鼠标监听器,则在使用键盘时不会出现“按”事件。
我会选择动作听众,更清楚。
答案 2 :(得分:0)
当Button触发Action事件时,将调用已注册的ActionListener
,当窗口小部件检测到鼠标单击时,将调用MouseListener
。
在您的示例中,当您使用鼠标单击按钮时,这两种方法都显示相同的行为。但是要关注按钮并按下SPACE
,这应该触发一个动作事件并触发动作侦听器而不是鼠标侦听器。
建议在按钮上使用ActionListener,否则您将无法使用键盘控制应用程序,或者您需要添加另一个键事件侦听器。
答案 3 :(得分:-2)
如果你想在单击Jbutton时做某事,动作监听器会更好,因为如果用户在JButton上按下鼠标然后稍微移动鼠标,则鼠标监听器无法识别按钮上的鼠标是否被点击在释放鼠标按钮的同时保持在按钮内的整个时间,但是动作监听器会这样做。 MouseListener要求鼠标点击在鼠标按下和鼠标释放之间没有移动,这对我的用户来说并非如此。