鼠标点击事件
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 }