版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章键盘与鼠标事件响应
任务一:掌握事件处理机制
任务三:掌握对鼠标事件的响应方法
任务二:掌握对键盘事件响应方法
任务四:实训十事件响应实训10.1任务一掌握事件处理机制
10.1.1相关概念1.事件:是一个对象,它描述发生了什么事情。事件对象由在Java中预先定义好的类产生,Java定义了所有事件的事件类,如键盘操作对应的事件类是KeyEvent。java.awt.AWTEvent类是所有事件类的父类。2.事件源:能够产生事件的对象都可以称之为事件源,如键盘、鼠标、按钮等。3.事件处理方法:能够接收、解析处理事件类对象,实现和用户交互的方法。它以事件对象为参数。4.监视器:对事件源进行监视,使发生事件时做出处理的一种特殊的对象。事件源通过调用相应的方法将某个对象作为自己的监视器。10.1.2事件处理机制Java采用“授权事件模型”(EventDelegationModel)的事件处理模式。其原理为:事先定义多种事件类型(即用户在GUI组件上进行的操作,如单击事件),当用户对某个GUI组件进行操作时,可能触发相应的事件,这个组件就是事件源。如果此组件注册了事件监听器(可以通过addXXXXListener方法注册),事件被传送给已注册的监听器,事件监听器负责处理事件的过程。一个组件可以注册一个或多个监听器。监视器负责处理事件源发生的事件。监视器是个对象,为了处理事件源发生的事件,监视器会自动调用一个方法来处理事件。为了让监视器能对事件源发生的事件进行处理,创建该监视器的类必须声明实现相应的接口,即必须在类体中给出该接口中所有方法的方法体,这样在事件源发生事件时,监视器就自动调用执行被类实现的某个接口方法
①若要保证一个组件产生的某种类型事件XXXEvent有效,需要注册一个“事件监听器”监听它。用如下语句设置事件监听器:事件源.addXXXListener(XXXListener代表某种事件监听器)。②组件作为事件源,不同类型的组件会产生特定类型的事件。③一旦产生事件后,事件会被传送给已注册的一个或多个监听器。事件监听器是实现了与该事件相对应的XXXListener接口的类。④事件监听器监听到事件后,会根据事件的类型调用相应的事件处理方法。事件源产生事件事件1事件2监视器1监视器2捕获事件事件处理事件处理图10-1事件处理模型1.java.awt.event包(1)文本框回车、按钮单击、计时器、菜单项引发动作事件:java.awt.event.ActionEvent处理事件的接口:java.awt.event.ActionListener接口中的方法:publicvoidactionPerformed(ActionEventevent)(2)单选按钮、多选按钮、下拉列表引发选项事件:java.awt.event.ItemEvent处理事件的接口:java.awt.event.ItemListener接口中的方法:publicvoiditemStateChanged(ItemEventevent)(3)键盘引发动作事件:java.awt.event.KeyEvent处理事件的接口:java.awt.event.KeyListener(4)鼠标引发鼠标事件:java.awt.event.MouseEvent处理事件的接口:java.awt.event.MouseListener与java.awt.event.MouseMotionListener接口。2.java.swing.event包(1)列表(JList)引发列表选择事件:java.swing.event.ListSelectionEvent处理事件接口:java.swing.event.ListSelectionListener接口中的方法:publicvoidvalueChanged(ListSelectionEventevent)(2)树(JTree)引发树选择事件:java.swing.event.TreeSelectionEvent处理事件接口:java.swing.event.TreeSelectionListener接口中的方法:publicvoidvalueChanged(TreeSelectionEventevent)
(3)滑动杆(JSlider)引发改变事件:java.swing.event.ChangeEvent处理事件接口:java.swing.event.ChangeListener接口中的方法:publicvoidstateChanged(ChangeEventevent)10.2任务二掌握对键盘事件响应方法10.2.1键盘事件当键盘按下、释放、点击时都会触发键盘事件(java.awt.event.KeyEvent),常用的KeyEvent方法是publicintgetKeyCode(),它用于获取所按下键的编码值。键盘事件类提供了很多静态常量表示键的编码值,如:VK_A键A的编码值VK_DOWN下箭头键的编码值VK_UP上箭头键的编码值VK_1键1的编码值VK_ENTER表示回车编码值VK_SPACE表示空格键编码值
更多的键码值可以查阅JavaAPI文档来获得。编写键盘事件响应程序时,使用语句if(e.getKeyCode()==KeyEvent.VK_B)可以判断是否按下了字母键B,然后做相应处理,语句中的e是事件处理时接收的键盘事件对象参数名。10.2.2键盘监听接口KeyListener对键盘事件可以通过java.awt.event.KeyListener接口中提供的方法来处理。这个接口有三个方法:1.keyPressed(KeyEvente)响应按下键盘事件;2.keyTyped(KeyEvente)响应按下又松开键盘事件;3.keyReleased(KeyEvente)响应松开键盘事件;它们都是publicvoid方法,事件源要使用addKeyListener方法添加监视器来获得事件。【例10-1】对键盘事件进行响应。importjava.awt.event.*;importjavax.swing.*;importjava.awt.*;public
classhhextendsJFrameimplementsKeyListener{ JButtonJButton1; hh(){JPaneljpanel1=newJPanel(); JButton1=newJButton("请按M键!"); JButton1.addKeyListener(this);
this.setSize(200,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jpanel1.add(JButton1);
this.add(jpanel1);
this.setVisible(true); }publicvoidkeyPressed(KeyEvente){ if(e.getKeyCode()==KeyEvent.VK_M) {JButton1.setBounds(60,60,90,90); JButton1.setBackground(Color.red); } } publicvoidkeyReleased(KeyEvente){} publicvoidkeyTyped(KeyEvente){} publicstaticvoidmain(Stringargs[]){ newhh(); }}10.2.3键盘适配器类KeyAdapter使用KeyListener接口时,即使有些方法不使用也必须在程序中写出接口的所有方法,因此比较麻烦,而java.awt.event.keyAdapter类本身就使用了KeyListener接口,并对接口的三个方法增加了空方法体,因此使用keyAdapter类时不必像使用接口那样实现所有方法,只需覆盖要响应的键盘事件方法即可。下面的程序是通过使用键盘适配器类来实现响应键盘事件,当分别按“R”、“G”、“B”时将圆的颜色设置为红色、绿色和蓝色。【例10-2】importjava.awt.event.*;importjavax.swing.*;importjava.awt.*;publicclasshhextendsJFrame{ Colorc; hh(){ this.setSize(200,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); addKeyListener(newMyType()); } classMyTypeextendsKeyAdapter{publicvoidkeyTyped(KeyEvente){if(e.getKeyChar()=='r'||e.getKeyChar()=='R')c=Color.red;elseif(e.getKeyChar()=='g'||e.getKeyChar()=='G')c=Color.green;elseif(e.getKeyChar()=='b'||e.getKeyChar()=='B')c=Color.blue;elsec=Color.black; repaint();}}publicvoidpaint(Graphicsg){ g.setColor(c); g.fillOval(60,60,100,100); }publicstaticvoidmain(Stringargs[]){ newhh();}}10.3任务三掌握对鼠标事件的响应方法
10.3.1鼠标事件鼠标事件源各种动作可以触发鼠标事件,如按下鼠标、点击鼠标、释放鼠标、鼠标进入和鼠标退出。鼠标事件类型是java.awt.event.MouseEvent,当发生鼠标事件时MouseEvent类自动创建一个鼠标事件对象。1.MouseEvent类有几个常用的方法:(1)getX()用于获取鼠标x坐标(2)getY()用于获取鼠标y坐标;(3)getButton()用于获取鼠标的左中右键值;根据键值来知道按的是哪一个键,MouseEvent.BUTTON1、MouseEvent.BUTTON2和MouseEvent.BUTTON3分别是左中右三个键值。例如在程序中通过if(e.getButton()==MouseEvent.BUTTON1)可以判断按的是否是左键。(4)getClickCount()获取点击次数;2.添加鼠标监视器的方法:publicvoidaddMouseListener()。3.移去鼠标监视器的方法:publicvoidremoveMouseListener().10.3.2使用MouseListener接口处理鼠标事件通过使用java.awt.event.MouseListener接口可以对鼠标事件进行处理,它有以五个方法:(1)mousePressed(MouseEvent)方法,按下鼠标时,接口监视器发现这个事件后自动调用这个方法。(2)mouseReleased(MouseEvent)方法,松开鼠标时,接口监视器发现这个事件后自动调用这个方法。(3)mouseEntered(MouseEvent)方法,鼠标指针进入容器时,接口监视器发现这个事件后自动调用这个方法。(4)mouseExited(MouseEvent)方法,鼠标指针离开容器时,接口监视器发现这个事件后自动调用这个方法。(5)mouseClicked(MouseEvent)方法,点击鼠标时,接口监视器发现这个事件后自动调用这个方法。这五个方法不管鼠标按键是左中右都会执行,如果要根据不同键进行不同处理就要先用getButton()方法来判断。下面通过例10-3来说明如何用MouseListener接口来响应鼠标事件【例10-3】importjava.awt.*;importjava.applet.*;importjava.awt.event.*;publicclassm1extendsAppletimplementsMouseListener{ TextFieldtext1; intx; publicvoidinit(){x=10; text1=newTextField(40); add(text1); text1.setFont(newFont("隶书",Font.BOLD,20)); addMouseListener(this); } publicvoidmousePressed(MouseEvente){ text1.setText("鼠标被按下,重新画圆!"); repaint();}publicvoidmouseReleased(MouseEvente){ text1.setText("鼠标被松开,指针坐标是:"+e.getX()+","+e.getY()); } publicvoidmouseEntered(MouseEvente){ text1.setText("鼠标进入文本框,指针坐标是:"+e.getX()+","+e.getY()); } publicvoidmouseExited(MouseEvente){ text1.setText("鼠标离开文本框了!"); } publicvoidmouseClicked(MouseEvente){ if(e.getClickCount()==2) {text1.setText("双击鼠标,指针坐标是:"+e.getX()+","+e.getY()); } }publicvoidpaint(Graphicsg){ x=x+5; g.setColor(Color.red); g.drawOval(60,60,x,x); g.setColor(Color.blue); g.fillOval(60,60,x,x); } }10.3.3使用MouseMotionListener接口处理鼠标事件
MouseListener接口中没有鼠标移动(不按下鼠标)和拖动(按下鼠标)的事件处理,对这两种事件响应就要用java.awt.event.MouseMotionListener接口来处理。 它有两个方法:1)mouseDragged(MouseEvent)处理鼠标拖动事件2)mouseMoved(MouseEvent)处理鼠标移动事件事件源添加监视器方法:publicvoidaddMouseMotionListener()
通过下面的画画程序我们了解一下使用MouseMotionListener接口处理鼠标事件的方法。【例10-4】importjava.awt.*;importjava.applet.*;importjava.awt.event.*;publicclassm2extendsAppletimplementsMouseMotionListener{ intx=0,y=0; publicvoidinit(){ setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); setBackground(Color.green); addMouseMotionLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论