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


    鼠标点击事件

     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 }
  • 相关阅读:
    2019版:第七章:(1)Redis 持久化—RDB
    第三章:(2)高可用 之 集群下dubbo负载均衡配置
    2019版:第六章:(1)Redis 事务
    2019版:第七章:(3)Redis 持久化—RDB和AOF
    第二章:(7)Dubbo 配置与SpringBoot整合
    第二章:(6)Dubbo 常用配置之 本地存根
    2019版:第六章:(2)Redis 事务—秒杀案例
    2019版:第七章:(2)Redis 持久化—AOF
    敏捷开发修炼之道读书笔记2
    敏捷开发修炼之道读书笔记1
  • 原文地址:https://www.cnblogs.com/sunBinary/p/9856388.html
Copyright © 2020-2023  润新知