2013-04-06 88 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