日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 鼠标单击_转:java 鼠标单击和双击的控制

發(fā)布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 鼠标单击_转:java 鼠标单击和双击的控制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前序:

在一個項(xiàng)目中為了使用方便,我們需要完成這樣一個功能,既是鼠標(biāo)單擊一個swing按鈕時,彈出A對話框,雙擊同一個按鈕時彈出B對話框。

第一個實(shí)現(xiàn):

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

凝思中:

仔細(xì)分析,才發(fā)現(xiàn)A對話框并不是那么沒有自知之明,它確實(shí)也是收到了邀請。在我們雙擊的時候,時間列隊(duì)里果真有一個ClickCount==1的鼠標(biāo)事件,后邊才是ClickCount==2的鼠標(biāo)事件。實(shí)際上不論你是連續(xù)點(diǎn)擊幾次,java都總是一次發(fā)送鼠標(biāo)事件,從ClickCount=1、ClickCount=2、ClickCount=3 ……依次發(fā)送

解決的辦法:

程序收到一個ClickCount=1的事件時,怎么知道它是雙擊事件第一個事件,還是單擊事件呢?若是單擊事件,就處理;若是緊跟著還有一個ClickCount = 2的事件我們就要放棄這個事件。

為了實(shí)現(xiàn)這么令人為難的辦法,我們只好,在每次接到單擊事件時,等待一段時間,看看后續(xù)的特定時間內(nèi)是否有雙擊的事件產(chǎn)生,若是有,就放棄單前的單擊事件,若是沒有,就處理單擊事件。

(發(fā)現(xiàn)好蠢!)

示例代碼:

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");

}

一點(diǎn)建議:

實(shí)際上,文中給出的解決并不是完美的,甚至可以說是愚蠢的。但是若一陣要這樣,并沒有更好的辦法了(個人意見)。

回頭想想,為何會遇上這樣的問題,最大的原因是因?yàn)闆]有把單擊和雙擊得響應(yīng)設(shè)計(jì)好,他們不能很好的兼容。

總結(jié)

以上是生活随笔為你收集整理的java 鼠标单击_转:java 鼠标单击和双击的控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。