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");

}

一点建议:

实际上,文中给出的解决并不是完美的,甚至可以说是愚蠢的。但是若一阵要这样,并没有更好的办法了(个人意见)。

回头想想,为何会遇上这样的问题,最大的原因是因为没有把单击和双击得响应设计好,他们不能很好的兼容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值