鼠标双击事件

116 篇文章 22 订阅

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

java中没有给出鼠标双击事件,虽然可以通过事件源e.getClickCount()==2来判断鼠标点击次数,但是执行双击事件的同时也执行了单击事件,并没有把双击和单击区分开来。

我们可以这样考虑,当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.   

package com.lovo;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyMouseListener extends 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;
  }

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

  // 定时器开始执行,延时0.2秒后确定是否执行单击事件
  timer.schedule(new 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 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!");
 }
}


 


 

package com.lovo;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test extends JFrame {

	public Test() {
		super("test");
		JButton b = new JButton("button");
		b.setBounds(50, 50, 100, 30);
		this.setLayout(null);
		this.add(b);
		b.addMouseListener(new MyMouseListener());

		this.setSize(500, 300);
		this.setVisible(true);
		this.setLocationRelativeTo(null);
	}

	public static void main(String args[]) {
		new Test();
	}

}


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值