代码如下:
1 void OnGUI(){ 2 Event e=Event.current; 3 if(e.isMouse&&(e.clickCount==2)) 4 Debug.Log("用户双击了鼠标"); 5 }
代码如下:
1 void OnGUI(){ 2 Event e=Event.current; 3 if(e.isMouse&&(e.clickCount==2)) 4 Debug.Log("用户双击了鼠标"); 5 }
转载于:https://www.cnblogs.com/yunquan/p/4783035.html
寒假以来打了几天游戏,却发现有时候枪会走火,便得知是鼠标微动出现了双击现象。可以采用以下方法检测微动是否产生双击。将其中的html代码保存至记事本,然后修改拓展名为html再打开即可,最终比对实际点击次数和显示点击次数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var num2=0
function f2(){
num2++;
text.innerHTML="点击了"+num2+" 次"
}
</script>
</head>
<body>
<div style="background-color: green;width: 500px;height: 500px;" onmousedown="f2()" ></div>
<h1 id="text">test</h1>
</body>
</html>
实际运行效果:
保险起见,我还是购入了新的日产欧姆龙微动,打算自行更换。
importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.MouseAdapter;importjava.awt.MouseEvent;public class MyMouseClickListener extends MouseAdapter implementsMouseListener{
// 取得当前操作系统的双击时间长度参数private final static int MULTI_CLICK_INTERVAL = Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");privateMouseEvent lastEvent;privateTimer timer;
private int mouseButtonNumber = -1;publicMyMouseClickListener(){this(MULTI_CLICK_INTERVAL);
}public MyMouseClickListener(intdelay){
// 初始化一个计数器。这个计数器在启动以后,经过delay长的时间,自动停止。this.timer = new Timer(delay,this);
}
@overridepublic voidmouseClicked(MouseEvent e){if(e.getClickCount > 2){return;
}
lastEvent=e;
// 如果计时器还在运行,且上次鼠标是左键点击,且本次点击也是左键点击,则视为合法左键双击。if(timer.isRunning() && mouseButtonNumber == MouseEvent.BUTTON1 && e.getButton == MouseEvent.BUTTON1){
timer.stop();
doubleClicked(lastEvent);
}else{
timer.restart();
mouseButtonNumber = e.getButton();
}
}
/*
* 单击以后的处理,自行覆盖
*/public voidsingleClicked(MouseEvent e){
}
/*
* 双击以后的处理,自行覆盖编写
*/public voiddoubleClicked(MouseEvent e){
}
@overridepublic voidactionPerformed(ActionEvent e){
timer.stop();
singleClicked(lastEvent);
}
}
1.核心原理:双击以后,双击中的第一下点击会启动timer,这时候timer开始计时,因为timer在经过指定时间delay以后进入停止状态,所以当第二下点击到来的时候,判断timer是否isRunning(),就能够知道这两次点击的时间间隔是否满足
当前操作系统的设置。如果timer.isRunning() == true,说明是合法双击,这时调用doubleClicked()方法,如果timer.isRunning == false说明两次点击时间间隔已经超过系统承认的时间间隔,将第二次点击作为下一轮判断的第一次点击。
2.判断是否是鼠标左键的双击,如果没有对e.getButton()的判断,双击两下鼠标上的任何按键都能触发doubleClicked方法。
3.上面代码的实现过程中,容易出错和被忽略的是timer.restart()方法的调用时机。
下面加上一个根据这个原理实现的JTable的双击监听器,
前提是把MyMouseClickListener中的private属性改为protected修饰。
public class MyTableMouseClickListener extendsMyMouseClickListener{protected JTable table1 = null;protected int line = -1;
@overridepublic voidmouseClicked(MouseEvent e){if(e.getClickCount() == 1){
table1=(JTable)(e.getSource());
line=table1.getSelectedRow();
timer.restart();
mouseButtonNumber=e.getButton();return;
}if(e.getClickCount() > 2){return;
}
JTable table2=(JTable)(e.getSource());if((null == table1 || table2 != table1) || table2.getSelectedRow{} !=line){return;
}
lastEvent= 2;if(timer.isRunning() && mouseButtonNumber == MouseEvent.BUTTON1 && e.getButton() ==MouseEvent.BUTTON1){
timer.stop();
doubleClicked(lastEvent);
}
}
}
1、JTable某行的双击事件在应用中比较普遍,但即使解决了鼠标左键双击的问题,还存在一个问题,如果双击的两下点击动作分别落在表格的两行上也被认为是合法的,
但这并不是我们想要的。
2、改造mouseClicked方法,在左键点击第一下以后记下点击的JTable对象及点击的行号,待第二下左键点击以后两厢进行对比验证,相同的再触发doubleClicked方法。
3、需要注意的还是timer.restart()方法的调用时机,防止timer在stop了以后没有及时restart造成timer没有启动,无法准确及时调用doubleClicked的问题。
展开全部
是你的判断有问题吧,62616964757a686964616fe4b893e5b19e31333335313761没判断当前窗体是否是最大化,不知道理解的对不对。import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MouseDemo extends JFrame {
private static final long serialVersionUID = 1L;
boolean IS_MAXIMIZED = false;
public MouseDemo() {
super("DoubleClick Demo");
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
if (IS_MAXIMIZED) {
setExtendedState(JFrame.NORMAL);
IS_MAXIMIZED = false;
} else {
setExtendedState(JFrame.MAXIMIZED_BOTH);
IS_MAXIMIZED = true;
}
}
}
});
this.setSize(new Dimension(200, 150));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new MouseDemo().setVisible(true);
}
}