java 按一下滑鼠和雙擊的控制

來源:互聯網
上載者:User
前序:
在一個項目中為了使用方便,我們需要完成這樣一個功能,既是按一下滑鼠一個swing按鈕時,彈出A對話方塊,雙擊同一個按鈕時彈出B對話方塊。

第一個實現:
首先想到的是:MouseEvent.getClickCount()==1 或是 ==2來區分,開始想的易如反掌,只有到開始測試時才發現,這樣根本就不會有效果。在單擊時,一切正常,A對話方塊如願的顯示了。可是在雙擊時,B對話方塊顯示了,同時A對話方塊也厚顏無恥的出現了,我們並沒有邀請他啊。:)不該來的也來了。

凝思中:
仔細分析,才發現A對話方塊並不是那麼沒有自知之明,它確實也是收到了邀請。在我們雙擊的時候,時間列隊裡果真有一個ClickCount==1的滑鼠事件,後邊才是ClickCount==2的滑鼠事件。實際上不論你是連續點擊幾次,java都總是一次發送滑鼠事件,從ClickCount=1、ClickCount=2、ClickCount=3 ……依次發送

解決的辦法:
程式收到一個ClickCount=1的事件時,怎麼知道它是雙擊事件第一個事件,還是單擊事件呢?若是單擊事件,就處理;若是緊跟著還有一個ClickCount = 2的事件我們就要放棄這個事件。
為了實現這麼令人為難的辦法,我們只好,在每次接到單擊事件時,等待一段時間,看看後續的特定時間內是否有雙擊的事件產生,若是有,就放棄單前的單擊事件,若是沒有,就處理單擊事件。
(發現好蠢!)

範例程式碼:

if (e.getClickCount() == 1) {
mouseTimer = new javax.swing.Timer(350, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("Single");
mouseTimer.stop();
}
});
mouseTimer.restart();
} else if (e.getClickCount() == 2 && mouseTimer.isRunning()) {
mouseTimer.stop();
System.out.println("Double");
}

一點建議:
實際上,文中給出的解決並不是完美的,甚至可以說是愚蠢的。但是若一陣要這樣,並沒有更好的辦法了(個人意見)。
回頭想想,為何會遇上這樣的問題,最大的原因是因為沒有把單擊和雙擊得響應設計好,他們不能很好的相容。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.