java鼠标键盘事件及实例.docx

上传人:b****0 文档编号:12751007 上传时间:2023-04-21 格式:DOCX 页数:16 大小:19.80KB
下载 相关 举报
java鼠标键盘事件及实例.docx_第1页
第1页 / 共16页
java鼠标键盘事件及实例.docx_第2页
第2页 / 共16页
java鼠标键盘事件及实例.docx_第3页
第3页 / 共16页
java鼠标键盘事件及实例.docx_第4页
第4页 / 共16页
java鼠标键盘事件及实例.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

java鼠标键盘事件及实例.docx

《java鼠标键盘事件及实例.docx》由会员分享,可在线阅读,更多相关《java鼠标键盘事件及实例.docx(16页珍藏版)》请在冰豆网上搜索。

java鼠标键盘事件及实例.docx

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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1