java 鼠標單擊和雙擊的控制

前序: 在一個項目中爲了使用方便,我們需要完成這樣一個功能,既是鼠標單擊一個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"); } 一點建議: 實際上,文中給出的解決並不是完美的,甚至可以說是愚蠢的。但是若一陣要這樣,並沒有更好的辦法了(個人意見)。 回頭想想,爲何會遇上這樣的問題,最大的原因是因爲沒有把單擊和雙擊得響應設計好,他們不能很好的兼容。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章