zoukankan      html  css  js  c++  java
  • 转:java 鼠标单击和双击的控制

    前序:
       在一个项目中为了使用方便,我们需要完成这样一个功能,既是鼠标单击一个swing按钮时,弹出A对话框,双击同一个按钮时弹出B对话框。
      第一个实现:
       首先想到的是:MouseEvent.getClickCount()==1 或是 ==2来区分,开始想的易如反掌,只有到开始测试时才发现,这样根本就不会有效果。在单击时,一切正常,A对话框如愿的显示了。可是在双击时,B对话框显示了,同时A对话框也厚颜无耻的出现了,我们并没有邀请他啊。:)不该来的也来了。
      凝思中:
       仔细分析,才发现A对话框并不是那么没有自知之明,它确实也是收到了邀请。在我们双击的时候,时间列队里果真有一个ClickCount==1的鼠标事件,后边才是ClickCount==2的鼠标事件。实际上不论你是连续点击几次,java都总是一次发送鼠标事件,从ClickCount=1、ClickCount=2、ClickCount=3 ……依次发送
      解决的办法:
       程序收到一个ClickCount=1的事件时,怎么知道它是双击事件第一个事件,还是单击事件呢?若是单击事件,就处理;若是紧跟着还有一个ClickCount = 2的事件我们就要放弃这个事件。
       为了实现这么令人为难的办法,我们只好,在每次接到单击事件时,等待一段时间,看看后续的特定时间内是否有双击的事件产生,若是有,就放弃单前的单击事件,若是没有,就处理单击事件。
       (发现好蠢!)
      示例代码:
      if (e.getClickCount() == 1) {
       mouseTimer = new javax.swing.Timer(350, new ActionListener() {
       public void actionPerformed(ActionEvent evt) {
       System.out.println("Single");
       mouseTimer.stop();
       }
       });
       mouseTimer.restart();
       } else if (e.getClickCount() == 2 && mouseTimer.isRunning()) {
       mouseTimer.stop(); 
       System.out.println("Double");
       }
      一点建议:
       实际上,文中给出的解决并不是完美的,甚至可以说是愚蠢的。但是若一阵要这样,并没有更好的办法了(个人意见)。
       回头想想,为何会遇上这样的问题,最大的原因是因为没有把单击和双击得响应设计好,他们不能很好的兼容。

     

     

  • 相关阅读:
    PIL库,图像处理第三方库
    文件指针
    机器学习之KNN---k最近邻算法-机器学习
    python 中的内置高级函数
    sklearn中standardscaler中fit_transform()和transform()有什么区别,应该怎么使用?
    python中导入sklearn中模块提示ImportError: DLL load failed: 找不到指定的程序。
    pandas中读取文件报错
    beacon帧字段结构最全总结(一)——beacon基本结构
    python中实例方法,类方法,静态方法简单理解
    一种logging封装方法,不会产生重复log
  • 原文地址:https://www.cnblogs.com/youxin/p/2798899.html
Copyright © 2011-2022 走看看