2013-04-06 37 views
1

我觉得奇怪的是,在我的项目中,并不总是听到mouselistener。有没有其他人遇到过这个?或者我做错了什么?我必须在打开之前多次点击它。我在点击之间等待,看看它是否是性能问题。爪哇MouseListener不总是工作

JButton btnPin = new JButton("Pin"); 
btnPin.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent arg0) { 
     if(staffPinDialog == null || staffPinDialog.isShowing() == false) 
      staffPinDialog = new StaffPinDialog(idClicked);     
    } 
}); 

StaffPinDialog是一个JDialog,其中引用已在别处创建。 idClicked也总是被初始化。

+0

为了更快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2013-04-06 12:15:48

+2

'mouseClicked(...)'并不总是每次按下鼠标按钮时调用,特别是当鼠标在按下和释放之间移动时不会被调用。 'mousePressed(...)'或'mouseReleased(...)'更好,但是说了这样的话,你根本不应该使用MouseListener,而应该使用ActionListeners(按照JB Nizet的答案)或AbstractActions。 – 2013-04-06 12:51:27

回答

5

你不应该使用MouseListener来检测按钮点击。改用ActionListener。

这也将有能够使用键盘点击按钮的额外优势。

+1

...并且如果在按钮上调用'setEnabled(false)',将自动关闭侦听器,并且更符合使用动作 - 更强健的侦听器对象具有比ActionListeners更多的行为和状态,并且轻松分享按钮。 1+ – 2013-04-06 12:49:17

+0

谢谢大家,这有助于很多事情。 – 2013-04-06 14:49:13