import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.MouseAdapter; import java.awt.MouseEvent; public class MyMouseClickListener extends MouseAdapter implements MouseListener{ // 取得当前操作系统的双击时间长度参数 private final static int MULTI_CLICK_INTERVAL = Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"); private MouseEvent lastEvent; private Timer timer; public MyMouseClickListener(){ this(MULTI_CLICK_INTERVAL); } public MyMouseClickListener(int delay){ // 初始化一个计数器。这个计数器在启动以后,经过delay长的时间,自动停止。
this.timer = new Timer(delay,this); } @override public void mouseClicked(MouseEvent e){ if(e.getClickCount > 2){ return; } lastEvent = e; if(timer.isRunning()){ //
timer.stop(); doubleClicked(lastEvent); }else{
timer.restart();
} }
/*
* 单击以后的处理,自行覆盖
*/ public void singleClicked(MouseEvent e){ }
/*
* 双击以后的处理,自行覆盖编写
*/ public void doubleClicked(MouseEvent e){ } @override public void actionPerformed(ActionEvent e){
timer.stop(); singleClicked(lastEvent); } }
上面监听器的核心原理:双击以后,双击中的第一下点击会启动timer,这时候timer开始计时,因为timer在经过指定时间delay以后进入停止状态,所以当第二下点击到来的时候,判断timer是否isRunning(),就能够知道这两次点击的时间间隔是否满足
当前操作系统的设置。如果timer.isRunning()
== true,说明是合法双击,这时调用doubleClicked()方法,如果timer.isRunning ==
false说明两次点击时间间隔已经超过系统承认的时间间隔,将第二次点击作为下一轮判断的第一次点击。