鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中却没有给出鼠标双击事件.我们可以通过事件源e.getClickCount()==2来判断鼠标点击次数来实现鼠标双击事件,例如:

public   class  MyMouseListener
     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!");
    }
  }
}

但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所以我们试图改进以上方案,不使用系统提供的e.getClickCount()方法.可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.

下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!

public   class  MyMouseListener
     extends  java.awt.event.MouseAdapter  ... {
  private static boolean flag=false;//用来判断是否已经执行双击事件
  private static int clickNum=0;//用来判断是否该执行双击事件

  public void mouseClicked(MouseEvent e) ...{
    final MouseEvent me=e;//事件源

    this.flag=false;//每次点击鼠标初始化双击事件执行标志为false

    if (this.clickNum == 1) ...{//当clickNum==1时执行双击事件
      this.mouseDoubleClicked(me);//执行双击事件
      this.clickNum=0;//初始化双击事件执行标志为0
      this.flag=true;//双击事件已执行,事件标志为true
      return;
    }

    //定义定时器
    java.util.Timer timer=new java.util.Timer();

    //定时器开始执行,延时0.2秒后确定是否执行单击事件
    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) ...{//定时器等待0.2秒后,双击事件仍未发生,执行单击事件
          mouseSingleClicked(me);//执行单击事件
          MyMouseListener.flag = true;
          MyMouseListener.clickNum=0;
          n=0;
          this.cancel();
          return;
        }
        clickNum++;
        n++;
      }
    },new java.util.Date(),500);
  }

  /** *//**
   * 鼠标单击事件
   * @param e 事件源参数
   */
  public void mouseSingleClicked(MouseEvent e)...{
    System.out.println("Single Clicked!");
  }

  /** *//**
   * 鼠标双击事件
   * @param e 事件源参数
   */
  public void mouseDoubleClicked(MouseEvent e)...{
    System.out.println("Doublc Clicked!");
  }
}

//Test.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame{
 
 public Test(){
  super("test");
  init();
  this.setSize(800,600);
  this.setVisible(true); 
 }
 
 private void init(){
  JButton b=new JButton("button");
  b.setBounds(50,50,100,30); 
  this.getContentPane().setLayout(null);
  this.getContentPane().add(b);
  b.addMouseListener(new MyMouseListener());
 }
 
 
 public static void main(String args[]){
  new Test(); 
 }
  
}

你将以上2个文件编译一下,再运行 Test.java  文件即可

Java鼠标双击事件相关推荐

  1. java监听鼠标双击_java鼠标双击事件 java鼠标双击监听

    爱学习的小伙伴们,可能都学习过java,但是你知道java鼠标双击事件是怎么实现的吗?不知道的话跟着小编一起来学习了解java鼠标双击事件吧. java鼠标双击事件实例介绍 public class ...

  2. java 双击触发事件_java鼠标双击事件怎么实现

    很多人都学习过java,但是你知道java鼠标双击事件怎么实现吗,跟着学习啦小编一起学习ava鼠标双击事件. java鼠标双击事件的实现方法 鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中 ...

  3. 如何在AutoCAD中实现鼠标双击事件

    摘要:本文为在AutoCAD ObjectARX二次开发中遇到的鼠标双击事件提供了多种解决方法. 在AutoCAD编程中,开发者可能会有这样一个好想法,或者用户有这么一个需求:当用鼠标双击某个实体的时 ...

  4. UE4鼠标双击事件实现

    自定义鼠标双击事件实现的蓝图如下:

  5. WPF Image控件鼠标双击事件的实现

    WPF Image控件鼠标双击事件的实现 1.绑定Image控件的OnMouseDown事件 <Image x:Name="Image" Margin="0&quo ...

  6. Unity3D 鼠标双击事件

    Unity3D 鼠标双击事件 Unity3D 鼠标双击事件总结了几种,特来记录一下! 一.计时Time.realtimeSinceStartup,从开始运行到首次点击的时间.跟.开始运行到下一次点击的 ...

  7. 实现QLabel鼠标双击事件功能

    实现QLabel鼠标双击事件功能 ReWritteQLabel.h文件 #ifndef REWRITTEQLABEL_H_ #define REWRITTEQLABEL_H_ #include #in ...

  8. WPF listviewItem 鼠标双击事件

    WPF listviewItem 鼠标双击事件 一.Listview 控件的命名 <ListView x:Name="SListView"   ItemContainerSt ...

  9. WPF 之 鼠标双击事件

    由于WPF中没有鼠标的双击事件,因而只能通过MouseDown事件来模拟.当连续的两次MouseDown事件的时间间隔,没有超过一个设定的时间阈值时,就计算为一个双击事件,并作相应的处理. 利用WPF ...

最新文章

  1. 使用 Go module 后 VScode 智能提示不生效解决方案
  2. C++ Primer 第九章 顺序容器
  3. 网易青果后端系统设计窥探(二)
  4. 关于mvc、mvp和mvvm的理解
  5. 挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
  6. android工作注意事项
  7. elasticsearch rest api操作
  8. 2019蓝桥杯省赛---java---A---8(修改数组)
  9. 数论 + 公式 - HDU 4335 What is N?
  10. 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery
  11. 经典神经网络 -- RetinaNet的Focal_Loss : 设计原理与pytorch实现
  12. 做一个消息自动回复,但是回复内容可以在网页上面输入,用input接收,错了,别人有新增选项,本身就是在页面进行新增,页面维护...
  13. GBDT(MART) 迭代决策树入门教程 | 简介 写的非常好!!
  14. 【Python】使用Labelme标注自己的数据集并由json生成Ground Truth
  15. DOS-强制结束进程命令(ntsd命令/taskkill命令)使用教程
  16. python将图片转为矢量图
  17. AD转换及其相关背景知识
  18. Keil报错:Undefined symbol GPIO_Init
  19. csgo被会话踢出什么鬼_csgo莫名其妙就被vac了 打一半vac关闭解决办法
  20. Appscan工具的使用

热门文章

  1. 写作中需要注意的事项
  2. Educoder计算机数据表示实验(HUST)第1关:汉字国标码转区位码实验
  3. 关于Java中的除以零的研究
  4. POST请求与GET请求
  5. lammps和atomsk中常用的建模方法
  6. 树莓派 python 蜂鸣器_红外感应模块+蜂鸣器实现简易报警
  7. how2j学习总结-未完
  8. android 安卓系统
  9. 网络安全常识!上网要注意哪些事项
  10. 浅谈IT行业加班现象