在一个组件上想分别处理双击、单击事件,可java好像没有处理双击的接口,按jdk的说法是通过getClickCount()得到鼠标击键数来区分,可我试了不行,都是作为单击处理的
在FAQ里搜到一个类似的问题,说是系统鼠标双击速度要调快些,可我调到最快,也没有用。
实在没办法了,求知道如何解决的高手援手,谢谢!!
在FAQ里搜到一个类似的问题,说是系统鼠标双击速度要调快些,可我调到最快,也没有用。
实在没办法了,求知道如何解决的高手援手,谢谢!!
高手快来啊
想了一个办法,捕到一个单击时,进行延时,看看后面有没有一个getClickCount()==2的事件,没有进行单击事件,有就双击事件,可这个延时为多长为好。显然这不是一个好办法,求高手快露面啊
大家有什么好办法,在下面回帖啊。回帖者都有分,分不够我还可以加的。谢谢了!!
extends java.awt.event.MouseAdapter { public void mouseClicked(MouseEvent e) {
System.out.println("clicked");
int clickTimes = e.getClickCount();
if (clickTimes == 2) {
System.out.println("Doublc Clicked!");
}
}
}
这时,您再看就会发现,一个双击事件总是会先被getClickCount()==1分支捕获,然后才是getClickCount()==2这样一来一次双击会同时引发两个事件,达不到要求了。
也就是在您代码情况上,加一个if ( e.getClickCount() == 1 ) System.out.println("Single Click");
则一次双击则会打印出:
Single Click
Double Click在区分单击与双击时,不处理让组件失去焦点的情况还好一点。但,如果让单击处理弹出一个对话框的话,双击事件就永远都不会发生了!!!
伤脑筋
extends java.awt.event.MouseAdapter {
private static boolean flag=false;
private static int clickNum=0; public void mouseClicked(MouseEvent e) {
this.flag=false;
if (this.clickNum == 1) {
this.clickNum=0;
this.flag=true;
System.out.println("Doublc Clicked!");
return;
} java.util.Timer timer=new java.util.Timer(); timer.schedule(new java.util.TimerTask() {
private int n=0;
public void run() {
if(MyMouseListener.flag){
n=0;
MyMouseListener.clickNum=0;
this.cancel();
return;
}
if (n == 1) {
System.out.println("Single Clicked!");
MyMouseListener.flag = true;
MyMouseListener.clickNum=0;
n=0;
this.cancel();
return;
}
clickNum++;
n++;
}
},new java.util.Date(),200);
}
}
现在就结贴