鼠标点击事件
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;//初始化双击事件执行标志为013 this.flag=true;//双击事件已执行,事件标志为true14 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 }