黑马程序员技术交流社区
标题:
关于鼠标监听的单双击问题
[打印本页]
作者:
草帽
时间:
2013-7-30 00:03
标题:
关于鼠标监听的单双击问题
本帖最后由 草帽 于 2013-7-30 21:05 编辑
bt.addMouseListener(new MouseAdapter()//鼠标监听
{
private int count = 1;
private int mouseCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标监听"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("鼠标被双击了");
else System.out.println("鼠标被点击"+mouseCount++);
}
});
复制代码
以上是鼠标监听的代码,在每次双击时也都会执行单击的代码,从网上搜的结果都是判断两次单击的时间,有人提到了
getTimer()这个方法应该是自己写的吧,看MouseEvent里边没有。请问这种问题就这么做吗?还有一个问题,就是如果确实是判断两次的时间,那getClickCount()方法的判断又是在多长时间内统计的呢?
作者:
手心里的温柔
时间:
2013-7-30 12:10
this.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 2)
{
System.out.println("double clicked");
}
}
});
复制代码
希望能帮到你
作者:
草帽
时间:
2013-7-30 14:15
手心里的温柔 发表于 2013-7-30 12:10
希望能帮到你
这个我知道,我是说每次双击操作也都会执行单击的代码,每次都要通过两次单击的时间间隔来屏蔽单击的代码,那么getClickCount()方法是怎么计数的?两次单击的时间略长就不被记录了吗
作者:
手心里的温柔
时间:
2013-7-30 17:55
这个有点复杂,网上找了别人实现的 楼主参考一下:
import java.awt.event.*;
import java.util.*;
import javax.swing.JFrame;
public class Test extends MouseAdapter
{
private boolean flag = false; // 用来判断是否已经执行双击事件 ,每执行一次事件便将其置为true
private int clickNum = 0; // 用来判断是否该执行双击事件, 每执行一次事件便将其置为0
private MouseEvent me = null;
Timer timer = new Timer(); // 创建一个定时器
public void mouseClicked(MouseEvent e)
{
//覆写MouseAdapter中mouseClicked方法
me = e; // 接收事件源 对象
this.flag = false; // 每次点击鼠标,初始化双击事件执行标志为false
if(this.clickNum == 1) //当clickNum==1时执行双击事件
{
this.mouseDoubleClicked(me);// 执行双击事件
this.clickNum = 0; // 执行完双击事件后,初始化双击事件执行标志为0
this.flag = true; // 双击事件已执行,事件标志为true
return;
}
//clickNum!=1时执行下面的代码
// 定时器开始执行,延时0.3秒后确定是否执行单击事件
timer.schedule( new MyTimerTask(), new Date() , 300);//从系统当前时间开始,每隔0.3s重复执行一次run()方法
}
class MyTimerTask extends TimerTask //定时器任务类
{
private int n = 0;// 记录定时器执行次数
public void run()
{
if (flag)
{// 如果双击事件已经执行,那么直接取消单击执行
n = 0;
clickNum = 0;
this.cancel(); //取消此计时器任务。
return;
}
if (n == 1)
{// 定时器等待0.3秒后,双击事件仍未发生,执行单击事件
mouseSingleClicked(me);// 执行单击事件
flag = true;
clickNum = 0;
n = 0;
this.cancel(); //取消此计时器任务。
return;
}
clickNum++;
n++;
}
}
public void mouseSingleClicked(MouseEvent e)
{
System.out.println("Single Clicked!");
}
public void mouseDoubleClicked(MouseEvent e)
{
System.out.println("Double Clicked!");
}
public static void main(String[] args)
{
JFrame jf = new JFrame();
jf.setSize(300,300);
jf.setVisible(true);
jf.addMouseListener(new Test());
}
}
复制代码
作者:
草帽
时间:
2013-7-30 21:04
手心里的温柔 发表于 2013-7-30 17:55
这个有点复杂,网上找了别人实现的 楼主参考一下:
嗯,学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2