转:java 鼠标单击和双击的控制
2012-12-03 00:03
120 查看
前序:
在一个项目中为了使用方便,我们需要完成这样一个功能,既是鼠标单击一个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");
}
一点建议:
实际上,文中给出的解决并不是完美的,甚至可以说是愚蠢的。但是若一阵要这样,并没有更好的办法了(个人意见)。
回头想想,为何会遇上这样的问题,最大的原因是因为没有把单击和双击得响应设计好,他们不能很好的兼容。
在一个项目中为了使用方便,我们需要完成这样一个功能,既是鼠标单击一个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");
}
一点建议:
实际上,文中给出的解决并不是完美的,甚至可以说是愚蠢的。但是若一阵要这样,并没有更好的办法了(个人意见)。
回头想想,为何会遇上这样的问题,最大的原因是因为没有把单击和双击得响应设计好,他们不能很好的兼容。
相关文章推荐
- java 鼠标单击和双击的控制
- 用Kinect来控制鼠标的移动、单击、双击和右击 及PPT控制(Windows sdk)
- 用VBS控制鼠标(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击)
- java鼠标各按键单击和左键击双击
- Java鼠标监听(单击、双击、滑轮)
- 用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击)
- 用VBS控制鼠标(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击)
- 用Kinect来控制鼠标的移动、单击、双击和右击 (Windows sdk)
- Java开发小游戏 用键盘控制精灵在游戏中上下左右跑动 窗体小游戏可打包下载,解压后双击start运行
- java小程序中鼠标事件的响应处理(包含右键、双击等)
- 扩展GridView(六)——数据行响应鼠标的单击和双击事件
- java的Swing编程====实现鼠标双击一下==画图===getMouseClicked的方法
- 实现鼠标单击双击响应
- Java解决双击事件触发前总触发单击事件的问题
- Swing之table中响应鼠标双击(单击)事件
- gridview鼠标双击事件(跳转至新页面并传值)单击获取值
- 【BCB 原创】深入 分析 C++Builder 6 的鼠标 单击 双击 事件 关键词: 单击 双击 实现机制
- Matlab探寻(一):控制鼠标和模拟键盘(java.awt.Robot)
- java通过控制鼠标实现屏幕广播的方法