2010-10-29 22 views

回答

76
public void mouseClicked(MouseEvent event) 
{ 
    if (event.getClickCount() == 2) { 
    System.out.println("double clicked"); 
    } 
} 
+2

您可能還想檢查'event.getButton()== MouseEvent.BUTTON1',以便只用鼠標左鍵來計算雙擊。 – 2017-07-19 18:00:27

16

假設你在Swing的意思是,一個MouseListener的分配給您的組件:

addMouseListener(new MouseAdapter(){ 
    @Override 
    public void mouseClicked(MouseEvent e){ 
     if(e.getClickCount()==2){ 
      // your code here 
     } 
    } 
}); 

參考:

14

的如果你想允許你的用戶在短時間內做多次雙擊,這是不夠的。 您受桌面配置的限制。 您可以通過查看的Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

的一個好方法,結果繞開的問題得到它是不使用getClickCount()檢查,但使用Timer在這裏你可以選擇你的點擊之間的間隔最大,並通過自己的處理計數(非常簡單)。

相關的代碼:

boolean isAlreadyOneClick; 

@Override 
public void mouseClicked(MouseEvent mouseEvent) { 
    if (isAlreadyOneClick) { 
     System.out.println("double click"); 
     isAlreadyOneClick = false; 
    } else { 
     isAlreadyOneClick = true; 
     Timer t = new Timer("doubleclickTimer", false); 
     t.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       isAlreadyOneClick = false; 
      } 
     }, 500); 
    } 
} 

與Win XP操作系統和完善的測試。

+0

智能使用「定時器」來取消標記,比兩個時刻之間的比較更爲複雜,但更易於使用。我看到的缺點是:在哪裏存儲'isAlreadyOneClick'?似乎在解決彼此時帶來問題。如果(讓我們想象)點擊很快完成,這個解決方案的行爲也會有「漏洞」:每次'Timer'都會重置標誌,並且只有在這個時候,纔會有真正的雙擊處理。另外,我認爲這種方法不是真正的GC和資源友好。 – Benj 2015-06-05 13:00:24

+0

你好Benj 我無法理解垃圾收集器和國旗之間的關係。你認爲進行的方式會打破某些東西嗎? 請問,你能否進一步確定你的例子及其後果? 對不起,我沒有看到你試圖展示。 – davidxxx 2015-06-06 18:33:06

+2

我看到兩件事:1 /只是每當「else」部分都會碰到時,就會創建一個新的Timer對象。我會將此計時器作爲對象的字段移動,以允許從其他位置進行管理,例如右鍵單擊或稍微進行管理。 2 /這些計時器將每500毫秒雙擊不放,然後如果您必須雙擊兩次,最後纔有可能不按預期工作。 – Benj 2015-06-08 11:37:35