| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:[分享]Java鼠标双击事件
只看楼主 加入收藏
heilong
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:777
专家分:0
注 册:2007-6-7
收藏
 问题点数:0 回复次数:4 
[分享]Java鼠标双击事件

鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中却没有给出鼠标双击事件.我们可以通过事件源e.getClickCount()==2来判断鼠标点击次数来实现鼠标双击事件,例如:

public class MyMouseListener
extends java.awt.event.MouseAdapter ...{

public void mouseClicked(MouseEvent e) ...{
System.out.println("clicked");
int clickTimes = e.getClickCount();
if (clickTimes == 2) ...{
System.out.println("Doublc Clicked!");
}
}
}

但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所以我们试图改进以上方案,不使用系统提供的e.getClickCount()方法.可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.

下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!

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

public void mouseClicked(MouseEvent e) ...{
final MouseEvent me=e;//事件源

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

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

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

//定时器开始执行,延时0.2秒后确定是否执行单击事件
timer.schedule(new java.util.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);//执行单击事件
MyMouseListener.flag = true;
MyMouseListener.clickNum=0;
n=0;
this.cancel();
return;
}
clickNum++;
n++;
}
},new java.util.Date(),500);
}

/** *//**
* 鼠标单击事件
* @param e 事件源参数
*/
public void mouseSingleClicked(MouseEvent e)...{
System.out.println("Single Clicked!");
}

/** *//**
* 鼠标双击事件
* @param e 事件源参数
*/
public void mouseDoubleClicked(MouseEvent e)...{
System.out.println("Doublc Clicked!");
}
}

//Test.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame{

public Test(){
super("test");
init();
this.setSize(800,600);
this.setVisible(true);
}

private void init(){
JButton b=new JButton("button");
b.setBounds(50,50,100,30);
this.getContentPane().setLayout(null);
this.getContentPane().add(b);
b.addMouseListener(new MyMouseListener());
}


public static void main(String args[]){
new Test();
}

}

你将以上2个文件编译一下,再运行 Test.java 文件即可


[此贴子已经被作者于2007-9-7 10:32:23编辑过]

搜索更多相关主题的帖子: 鼠标 Java 分享 
2007-09-07 10:30
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 

不错。。看看。

2007-09-07 10:59
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
收藏
得分:0 

全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2007-09-07 11:33
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
以下是引用simpson在2007-9-7 11:33:04的发言:

你的头像很sexy.

2007-09-07 11:44
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
收藏
得分:0 
用艺术的眼光 看
呵呵

不灌水啦!

全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2007-09-07 14:55
快速回复:[分享]Java鼠标双击事件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019259 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved