java鼠标键盘事件及实例.docx
- 文档编号:12751007
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:16
- 大小:19.80KB
java鼠标键盘事件及实例.docx
《java鼠标键盘事件及实例.docx》由会员分享,可在线阅读,更多相关《java鼠标键盘事件及实例.docx(16页珍藏版)》请在冰豆网上搜索。
java鼠标键盘事件及实例
鼠标监听器
鼠标监听器mouseListener监听鼠标事件MouseEvent。
相应事件和处理方法如下表:
鼠标事件 处理方法
MOUSE_CLICKED MouseClicked(MouseEvent) 鼠标点击(单或双)
MOUSE_PRESSED MousePressed(MouseEvent) 鼠标按下
MOUSE_RELEASED MouseReleased(MouseEvent) 鼠标松开
MOUSE_ENTERED MouseEntered(MouseEvent) 鼠标进入(某组件区域)
MOUSE_EXITED MouseExited (MouseEvent) 鼠标离开(某组件区域)
鼠标事件MouseEvent常用方法
intgetClickCount() 得到点击次数1OR2;
intgetX(),intgetY() 得到鼠标的(象素)位置。
对于鼠标的移动和拖放,另外用鼠标运动监听器mouseMotionListener。
因为许多程序不需要监听鼠标运动,把两者分开可简化程序。
有两个方法处理鼠标运动事件:
MOUSE_MOVED MouseMoved (MouseEvent) 鼠标在移动
MOUSE_DRAGGED MouseDragged(MouseEvent) 鼠标被拖动
下面的例程演示简单的鼠标监听,并在屏幕上输出鼠标操作的信息。
例2
下面是讨论MouseMotionListener的使用时机,它提供的下面的两个方法,可让你随时掌握鼠标的坐标,并处理拖曳鼠标的操作。
MouseMotionListenermouseDragged(MouseEvente)
mouseMoved(MouseEvente)
-----------------------------------------------------------------------
下面的范例让你知道鼠标在JFrame上的坐标,并拖曳出直线来。
MouseDemo3.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
/*为了达到画线的功能,我们分别implementsMouseListener与MouseMotionListener.
*/
publicclassMouseDemo3extendsJFrameimplementsMouseListener,MouseMotionListener{
intflag;//flag=1代表MouseMoved,flag=2代表MouseDragged
intx=0;
inty=0;
intstartx,starty,endx,endy;//起始坐标与终点坐标
publicMouseDemo3(){
ContainercontentPane=getContentPane();
contentPane.addMouseListener(this);
contentPane.addMouseMotionListener(this);
setSize(300,300);
show();
addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
}
);
}
/*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/
publicvoidmousePressed(MouseEvente){
startx=e.getX();
starty=e.getY();
}
publicvoidmouseReleased(MouseEvente){
endx=e.getX();
endy=e.getY();
}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){}
/*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/
publicvoidmouseMoved(MouseEvente){
flag=1;
x=e.getX();
y=e.getY();
repaint();
}
publicvoidmouseDragged(MouseEvente){
flag=2;
x=e.getX();
y=e.getY();
repaint();
}
publicvoidupdate(Graphicsg){
g.setColor(this.getBackground());
g.fillRect(0,0,getWidth(),getHeight());
paint(g);
}
publicvoidpaint(Graphicsg){
g.setColor(Color.black);
if(flag==1){
g.drawString("鼠标坐标:
("+x+","+y+";)",10,50);
g.drawLine(startx,starty,endx,endy);
}
if(flag==2){
g.drawString("拖曳鼠标价坐标:
("+x+","+y+";)",10,50);
g.drawLine(startx,starty,x,y);
}
}
publicstaticvoidmain(String[]args){
newMouseDemo3();
}
}
例3
实现一个简单的鼠标控制程序MouseController。
程序功能很简单:
随机移动鼠标并点击左键。
代码如下:
importjava.awt.AWTException;
importjava.awt.Dimension;
importjava.awt.Robot;
importjava.awt.Toolkit;
importjava.awt.event.InputEvent;
importjava.util.Random;
/**
*
*/
/**
*@Createdate2007-11-6
*/
publicclassMouseControllerimplementsRunnable{
privateDimensiondim;
privateRandomrand;
privateRobotrobot;
privatevolatilebooleanstop=false;
publicMouseController(){
dim=Toolkit.getDefaultToolkit().getScreenSize();
rand=newRandom();
try{
robot=newRobot();
}catch(AWTExceptionex){
ex.printStackTrace();
}
}
publicvoidrun(){
while(!
stop){
intx=rand.nextInt(dim.width);
inty=rand.nextInt(dim.height);
robot.mouseMove(x,y);
robot.mousePress(InputEvent.BUTTON1_MASK);
try{
Thread.sleep(2000);
}catch(InterruptedExceptionex){
ex.printStackTrace();
}
}
}
publicsynchronizedvoidstop(){
stop=true;
}
publicstaticvoidmain(String[]args){
MouseControllermc=newMouseController();
Thre
$False$
admcThread=newThread(mc);
System.out.println("MouseControllerstart");
mcThread.start();
try{
Thread.sleep(60000);
}catch(InterruptedExceptionex){
ex.printStackTrace();
}
mc.stop();
System.out.println("MouseControllerstoped");
}
}
例4本例程演示鼠标监听器,鼠标点击和运动的监听。
///
//MouseEvt.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classMyPanelextendsJPanelimplementsMouseMotionListener{
publicMyPanel(){
addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEventevt){
if(evt.getClickCount()>=2)
System.out.println("\n双击鼠标");
intx=evt.getX();inty=evt.getY();
System.out.println("点击鼠标的位置\nX:
"+x+"\ty:
"+y);
}
});
addMouseMotionListener(this);
}
publicvoidmouseMoved(MouseEventevt){
System.out.println("\n鼠标正在移动");
}
publicvoidmouseDragged(MouseEventevt){
System.out.println("\n鼠标正在拖动");
}
}
classMyFrameextendsJFrame{
publicMyFrame(){
setTitle("鼠标事件示例程序");
setSize(300,200);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
ContainercontentPane=getContentPane();
contentPane.add(newMyPanel());
}
}
publicclassMouseEvt{
publicstaticvoidmain(String[]args){
JFrameframe=newMyFrame();
frame.setVisible(true);
}
}
///
简要说明
在MyPanel的构建器中添加了鼠标适配器来监听鼠标点击数和位置。
也添加了运动监听器来处理移动和拖放操作。
鼠标双击事件
鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中却没有给出鼠标双击事件.我们可以通过事件源e.getClickCount()==2来判断鼠标点击次数来实现鼠标双击事件,例如:
publicclassMyMouseListener
extendsjava.awt.event.MouseAdapter...{
publicvoidmouseClicked(MouseEvente)...{
System.out.println("clicked");
intclickTimes=e.getClickCount();
if(clickTimes==2)...{
System.out.println("DoublcClicked!
");
}
}
}
但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所以我们试图改进以上方案,不使用系统提供的e.getClickCount()方法.可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.
下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!
publicclassMyMouseListener
extendsjava.awt.event.MouseAdapter...{
privatestaticbooleanflag=false;//用来判断是否已经执行双击事件
privatestaticintclickNum=0;//用来判断是否该执行双击事件
publicvoidmouseClicked(MouseEvente)...{
finalMouseEventme=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.Timertimer=newjava.util.Timer();
//定时器开始执行,延时0.2秒后确定是否执行单击事件
timer.schedule(newjava.util.TimerTask()...{
privateintn=0;//记录定时器执行次数
publicvoidrun()...{
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++;
}
},newjava.util.Date(),500);
}
/***//**
*鼠标单击事件
*@parame事件源参数
*/
publicvoidmouseSingleClicked(MouseEvente)...{
System.out.println("SingleClicked!
");
}
/***//**
*鼠标双击事件
*@parame事件源参数
*/
publicvoidmouseDoubleClicked(MouseEvente)...{
System.out.println("DoublcClicked!
");
}
}
//Test.java
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassTestextendsJFrame{
publicTest(){
super("test");
init();
this.setSize(800,600);
this.setVisible(true);
}
privatevoidinit(){
JButtonb=newJButton("button");
b.setBounds(50,50,100,30);
this.getContentPane().setLayout(null);
this.getContentPane().add(b);
b.addMouseListener(newMyMouseListener());
}
publicstaticvoidmain(Stringargs[]){
newTest();
}
}
键盘监听器
键盘监听器KeyListener用来监听键盘事件。
键盘事件有三种:
KEY_PRESSED键按下了,KEY_RELEASED键松开了,KEY_TYPED键按过了。
每个键都有一个键码,普通键的键码就是ASCII码。
键码可通过intgetKeyCode()方法获得。
Java设置了一种“虚拟键码”(VirtualKeyCode),用“VK_”作为前缀,例如VK_G。
下面是某些特殊键的虚拟键码。
键码
含义
键码
含义
VK_LEFT/VK_RIGHT
左右方向键
VK_CONTROL
Ctrl键
VK_KP_UP
小键盘向上
VK_ATL
Alt键
VK_PAUSE
暂停键
VK_SHIFT
Shift键
VK_NUMBER0
小键盘数字0
VK_F1
功能键F1
VK_0
数字键0
VK_B
字母键B
虚拟键码对应的是键位,不区分大小写。
要想知道大小写还必须查看修饰键(modifierkey)。
这由输入事件InputEvent的getModifere()方法得到,把返回值与常量SHIFT_MASK,CONTROL_MASK,ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态。
监听器KeyListener有三个方法keyPressed(KeyEventevt),keyReleased(KeyEventevt),keyTyped(KeyEventevt),分别用于相应事件发生后的处理。
下面的例程中给自己的键盘监听器建立了showKeyEventMsg方法来显示按键信息。
除了getKeyCode()方法得到键码外,还可用getKeyChar()方法得到输入的字符,用getKeyText(code)方法得到输入的字符串。
用isShiftDown()判断shift键是否被按下等。
当按下Control键时getKeyText返回的是“ctrl",Alt和Shift也类似。
下面的例子演示得到键码和字符的方法,在命令行上显示结果。
例1本例程演示键盘监听器后键码的用法。
///
//KeyEvt.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classMyKeyListenerimplementsKeyListener{
publicvoidkeyPressed(KeyEventevt){
System.out.println("\n按键被按下");
showKeyEventMsg(evt);
}
publicvoidkeyReleased(KeyEventevt){}
publicvoidkeyTyped(KeyEventevt){}
privatevoidshowKeyEventMsg(KeyEventevt){//显示按键事件信息
//得到按键对应的整型数
intcode=evt.getKeyCode();
//返回按键事件所代表的字符
charc=evt.getKeyChar();
//得到代表按键的字符串
StringszText=evt.getKeyText(code);
if(code!
=KeyEvent.VK_UNDEFINED)
System.out.println("\n按键对应的整型数:
"+code);
if(c!
=KeyEvent.CHAR_UNDEFINED)
System.out.println("\n与按键相联系的字符:
"+c);
if(evt.isShiftDown())
System.out.println("\n按键Shift被按下");
System.out.println("\n按键本身的字符串:
"+szText);
}
}
classButtonPanelextendsJPanel{
publicButtonPanel(){
//新建一个文本域组件
tf=newJTextField(20);
add(tf);
//指定用来处理该按钮事件的监听器对象为JPanel本身
myListener=newMyKeyListener();
tf.addKeyListener(myListener);
}
privateJTextFieldtf;
privateMyKeyListenermyListener;
}
classButtonFrameextendsJFrame{
publicButtonFrame(){
setTitle("键盘事件示例程序");
setSize(300,200);
setLocation(100,100);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 鼠标 键盘 事件 实例