下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!
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();
}
}
键盘监听器
键盘监听器KeyListener用来监听键盘事件 。键盘事件有三种:KEY_PRESSED键按下了,KEY_RELEASED键松开了,KEY_TYPED键按过了 。每个键都有一个键码,普通键的键码就是ASCII码 。键码可通过int getKeyCode()方法获得 。Java设置了一种“虚拟键码”(Virtual Key Code),用“VK_”作为前缀,例如VK_G 。下面是某些特殊键的虚拟键码 。
键码含义键码含义
VK_LEFT/VK_RIGHT左右方向键VK_CONTROLCtrl键
VK_KP_UP小键盘向上VK_ATLAlt键
VK_PAUSE暂停键VK_SHIFTShift键
VK_NUMBER0小键盘数字0VK_F1功能键F1
VK_0数字键0VK_B字母键B
虚拟键码对应的是键位 , 不区分大小写 。要想知道大小写还必须查看修饰键(modifier key) 。这由输入事件InputEvent的getModifere()方法得到,把返回值与常量SHIFT_MASK, CONTROL_MASK, ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态 。
监听器KeyListener有三个方法keyPressed(KeyEvent evt),keyReleased(KeyEvent evt),keyTyped(KeyEvent evt),分别用于相应事件发生后的处理 。下面的例程中给自己的键盘监听器建立了showKeyEventMsg方法来显示按键信息 。
除了getKeyCode()方法得到键码外,还可用getKeyChar()方法得到输入的字符,用getKeyText(code)方法得到输入的字符串 。用isShiftDown()判断shift键是否被按下等 。当按下Control键时getKeyText返回的是“ctrl" , Alt和Shift也类似 。
推荐阅读
- 夏普显卡怎么样,夏普是真4k吗
- 直播放礼物有什么好处,直播放礼物有什么好处吗
- flutter手势冲突,flutter按钮效果
- 双头u盘怎么连接手机,双头优盘怎样连接手机
- php判断数据库状态 php判断数据库状态的方法
- 老人无聊的时候看什么电视,老人该看什么电视
- net传说怎么安装,如何下载传说
- 低配好玩的游戏射击手机,好玩的低配置射击手游
- ws连接命令Linux linux wsl