Java鼠标双击事件

鼠标的单双击事件在很多时候对我们帮助很大,但是在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(),200);
  }


  
/**
   * 鼠标单击事件
   * 
@param e 事件源参数
   
*/

  
public void mouseSingleClicked(MouseEvent e){
    System.out.println(
"Single Clicked!");
  }


  
/**
   * 鼠标双击事件
   * 
@param e 事件源参数
   
*/

  
public void mouseDoubleClicked(MouseEvent e){
    System.out.println(
"Doublc Clicked!");
  }

}

 
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值