鼠标双击事件不可描述的问题

鼠标点击事件

 1 public class MyMouseListener
 2     extends java.awt.event.MouseAdapter {
 3 
 4   public void mouseClicked(MouseEvent e) {
 5     System.out.println("clicked");
 6     int clickTimes = e.getClickCount();
 7     if (clickTimes == 2) {
 8       System.out.println("Doublc Clicked!");
 9     }
10   }
11 }

但监听双击事件时总是出发单击事件,这就不能满足笔者的需求了,于是查了一些资料对其进行了一些扩展。

思路:对第一次监听的单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件,取消单击事件;如果在这段时间没有等到再次单击,那么执行单击任务.

 1 public class MyMouseListener extends java.awt.event.MouseAdapter {
 2   private static boolean flag=false;//用来判断是否已经执行双击事件
 3   private static int clickNumber=0;//用来判断是否该执行双击事件
 4 
 5   public void mouseClicked(MouseEvent e) {
 6     final MouseEvent mouseEvent=e;//事件源
 7 
 8     this.flag=false;//每次点击鼠标初始化双击事件执行标志为false
 9 
10     if (this.clickNumber == 1) {//当clickNumber==1时执行双击事件
11       this.mouseDoubleClicked(mouseEvent);//执行双击事件
12       this.clickNumber=0;//初始化双击事件执行标志为0
13       this.flag=true;//双击事件已执行,事件标志为true
14       return;
15     }
16 
17     //定义定时器
18     java.util.Timer timer=new java.util.Timer();
19 
20     //定时器开始执行,延时0.2秒后确定是否执行单击事件
21     timer.schedule(new java.util.TimerTask() {
22       private int n=0;//记录定时器执行次数
23       public void run() {
24         if(MyMouseListener.flag){//如果双击事件已经执行,那么直接取消单击执行
25           n=0;
26           MyMouseListener.clickNumber=0;
27           this.cancel();
28           return;
29         }
30         if (n == 1) {//定时器等待0.2秒后,双击事件仍未发生,执行单击事件
31           mouseSingleClicked(mouseEvent);//执行单击事件
32           MyMouseListener.flag = true;
33           MyMouseListener.clickNumber=0;
34           n=0;
35           this.cancel();
36           return;
37         }
38         clickNumber++;
39         n++;
40       }
41     },new java.util.Date(),200);
42   }
43 
44   /**
45    * 鼠标单击事件
46    * @param e 事件源参数
47    */
48   public void mouseSingleClicked(MouseEvent e){
49     System.out.println("Single Clicked!");
50   }
51 
52   /**
53    * 鼠标双击事件
54    * @param e 事件源参数
55    */
56   public void mouseDoubleClicked(MouseEvent e){
57     System.out.println("Doublc Clicked!");
58   }
59 }

 

posted @ 2018-10-26 15:02  ^sun^  阅读(446)  评论(0编辑  收藏  举报