您的位置:首页 > 编程语言 > Java开发

Java解决双击事件触发前总触发单击事件的问题

2018-02-05 16:32 381 查看
package com.sdrd.ActionListener;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;

public class MyMouseListener extends MouseAdapter {
private static boolean flag = false;// 用来判断是否已经执行双击事件
private static int clickNum = 0;// 用来判断是否该执行双击事件

@SuppressWarnings("static-access")
@Override
public void mouseClicked(MouseEvent e) {
final MouseEvent me = e;// 事件源
final JButton btn = (JButton) e.getSource();
final String name = btn.getText().split(" ")[0];
final int val = Integer.parseInt(btn.getText().split(" ")[1]);

this.flag = false;// 每次点击鼠标初始化双击事件执行标志为false

if (this.clickNum == 1) {// 当clickNum==1时执行双击事件
this.mouseDoubleClicked(me, val,name,btn);// 执行双击事件
this.clickNum = 0;// 初始化双击事件执行标志为0
this.flag = true;// 双击事件已执行,事件标志为true
return;
}

// 定义定时器
Timer timer = new Timer();

// 定时器开始执行,延时0.2秒后确定是否执行单击事件
timer.schedule(new TimerTask() {
private int n = 0;// 记录定时器执行次数

public void run() {
if (MyMouseListener.flag) {// 如果双击事件已经执行,那么直接取消单击执行
n = 0;
MyMouseListener.clickNum = 0;
this.cancel();
return;
}
if (n == 1) {// 定时器等待0.2秒后,双击事件仍未发生,执行单击事件
mouseSingleClicked(me, val,name,btn);// 执行单击事件
MyMouseListener.flag = true;
MyMouseListener.clickNum = 0;
n = 0;
this.cancel();
return;
}
clickNum++;
n++;
}
}, new java.util.Date(), 300);
}

/**
* 鼠标单击事件
*
* @param e
*            事件源参数
*/
public void mouseSingleClicked(MouseEvent e,int val,String name,JButton btn) {
System.out.println("Single Clicked!");
val += 1;
btn.setText(name + " " + val);
}

/**
* 鼠标双击事件
*
* @param e
*            事件源参数
*/
public void mouseDoubleClicked(MouseEvent e,int val,String name,JButton btn) {
System.out.println("Doublc Clicked!");
val = (val > 0) ? (val - 1) : 0;
btn.setText(name + " " + val);
4000
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: