Java语言程序设计与实现项目九-Java的事件处理机制_第1页
Java语言程序设计与实现项目九-Java的事件处理机制_第2页
Java语言程序设计与实现项目九-Java的事件处理机制_第3页
Java语言程序设计与实现项目九-Java的事件处理机制_第4页
Java语言程序设计与实现项目九-Java的事件处理机制_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、项目九 Java的事件处理机制 任务一 Java的事件处理 任务二 事件监听与处理 任务三 常用事件 任务四 拓展实训23 七月 20222任务一 Java的事件处理任务要求:本任务要求了解Java事件处理机制的概述掌握Java事件处理中事件、事件源、监听器等概念能够编写简单的Java事件处理程序 (一) 事件处理机制概述事件处理技术是Java用户界面设计中一个十分重要的技术。用户在图形用户界面中输入命令是通过移动鼠标或单击特定界面元素来实现的。为了能够接收用户的命令,界面系统首先应该能够识别这些鼠标或键盘的操作并做出相应的反应。通常,一个键盘或鼠标的操作会激发一个系统预先定义好的事件,用户只

2、需要设计程序代码定义每个特定事件发生时所对应的响应操作,这些程序代码将在它们对应的事件发生时由系统自动调用。在第8章编写的程序中,对按钮等组件进行单击操作,都没有什么反应,就是因为没有为事件编写相应的处理程序。Java.awt.event包中包含了许多用来处理事件的类和接口。 23 七月 2022(二) Java事件处理的基本概念1. 事件如果用户单击了某个按钮,或组件的状态发生了某种变化,或按下了某个键盘键等,此时都认为产生了某个事件(Event)。事件是系统在捕获用户界面操作过程中产生的代表相应操作的一个数据结构,是用户操作在Java系统内的数字表达,它描述了发生了什么事情。用户与用户界面

3、上的组件交互是通过响应各种事件来实现的,如用户单击了一个按钮,意味着发生了一个按钮事件。 23 七月 20222. 事件源(Event Source)产生事件的组件称事件源。例如,若用户用鼠标单击了按钮对象button,则该按钮button就是事件源。3. 监听器监听器(Listener)是调用事件处理方法的对象,它能够对事件源进行监听,以便对事件源所发生的事件做出相应的处理。事件源通过调用相应的方法将某个对象作为自己的监听器,如文本框可以调用以下方法注册监听器:addActionListener(监听器)4. 事件注册事件源为了将其上产生的事件传递给监听器接收并处理,应该提供注册和注销事件监

4、听器的方法。注册监听器用于使该事件源上发生的事件能够被监听器接收并处理,注销监听器用于使监听器不能监听到该事件源上发生的事件。23 七月 20225. 监听器接口监听器接口(事件处理方法)是能够接收、解析和处理事件类对象、实现和用户交互的方法。监听器是一个对象,为了处理事件源发生的事件,监听器会自动调用一个方法。Java规定,为了使监听器能够对事件源所发生的事件做出处理,创建该监听器的类必须声名实现相应的接口,即必须在类体中给出该接口中所有方法的方法体。那么当事件源发生事件时,监听器就会自动调用执行被类实现的某个接口方法。23 七月 20226. 授权处理模型同一个事件源上可能发生多种事件。就

5、像学校每天可能有多种事情会发生,如学生的学籍注册、专业选择、班级分配、宿舍安排、选修课程等,学校会安排(授权)不同的部门进行管理,如财务处管理学生学籍注册、教务管理专业选择、教学系管理班级分配等。23 七月 2022Java对事件的处理采取了这种称为授权处理机制(Delegation Model)的方式,事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。如在一个按钮对象上既可能发生鼠标单击事件,也可能发生鼠标双击事件,该按钮对象可以授权给两个事件处理者分别来处理单击事件和双击事件。有时也将事件处理者称为监听器,监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自

6、己所负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。也就是说,事件源和事件处理是分开的,一般组件都不处理自己的事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。如图9-1所示。23 七月 202223 七月 2022例9-1 设计一个窗口,窗口中有一个按钮,当该按钮被按下时,显示Hello Java.消息提示框。23 七月 2022代码如下:23 七月 202213任务二 事件监听与处理任务要求:本任务要求掌握Java事件处理步骤,包括如何确定事件监听器接口,给组件注册监听器和在程序中定义类来实

7、现监听器接口,重写接口中的所有方法。23 七月 2022Java运行时系统会生成ActionEvent类的对象actionE,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收Java运行时系统传递过来的事件对象actionE并进行相应的处理。 Java事件处理如图9-3所示,通常包含以下3个步骤。(1) 确定事件监听器的接口。(2) 给组件注册监听器。 (3) 在程序中定义类来实现监听器接口,重写接口中的所有方法。23 七月 2022(一) 事件监听器接口不同事件源上发生的事件种类是不同的,由不同的监听器处理。每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。

8、例如:(1)JButton(按钮)对象作为事件源可能引发ActionEvent类代表的事件ACTIONPERFORMED.(2)JCheckbox(复选框)对象等作为事件源可能引发的事件为ITEMSTATECHANGES。23 七月 2022编写事件处理程序时,首先应确定关注的事件属于何种监听器类型。系统提供的监听器是接口,它们定义在java.awt.event包中。 表9-1列出了所有AWT事件及其相应的监听器接口,共10类事件,11个接口。23 七月 202223 七月 2022事件类别描述信息接口名方 法ActionEvent激活构件ActionListeneractionPerform

9、ed(ActionEvent)ItemEvent选择了某些项ItemListeneritemStateChanged(ItemEvent)MouseEvent鼠标移动MouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent) 鼠标点击等MouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)23 七月 2022Key

10、Event键盘输入KeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusEvent构件收到或失去焦点FocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)AdjustmentEvent移动了滚动条等构件AdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentEvent对象移动、缩放、显示隐藏等ComponentListenercomponentMoved(Compo

11、nentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)23 七月 2022WindowEvent窗口收到窗口级事件WindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(Win

12、dowEvent)windowDeactivated(WindowEvent)ContainerEvent容器中增加、删除了构件ContainerListenercontainerAdded(containerEvent)containerRemoved(containerEvent)TextEvent文本字段或文本域发生改变TextListenertextValueChanged(TextEvent)Java语言类的层次非常分明,因而只支持单继承。为了实现多重继承的能力,Java用接口来实现,一个类可以实现多个接口,这种机制比多重继承具有更简单、更灵活、更强大的功能。在AWT中就经常用到声明

13、和实现多个接口。是无论实现了几个接口,接口中已定义的方法必须一一实现,虽然某些方法不需要具体的操作,但可以用空的方法体来代替,但必须所有方法都要写上。23 七月 2022(二) 事件源的注册在确定了监听器的类型后,要用事件源类的注册方法来注册一个监听器类的对象。这样事件源产生的事件会传送给已注册的处理该类事件的监听器对象,该对象将自动调用相应的事件处理方法来处理该事件。注册监听器可使用下列方法:事件源对象.add事件监听器(事件监听器对象); 23 七月 2022(三) 事件的相应处理完成事件源注册后,要调用事件源本身的相关方法向监听者进行注册。当事件源上发生监听者可以处理的事件时,事件源把这

14、个事件作为实际参数传递给监听者中负责这类事件的方法,这个方法被系统自动调用执行后,事件就得到了处理。 23 七月 2022例9-2 设计3个按钮,单击不同的按钮时,在窗口背景会显示不同的颜色。23 七月 2022代码如下:例9-3 在文本框中输入用户名和密码,当输入完按Enter键后,将输入的内容会通过消息提示框显示出来。23 七月 2022代码如下:(四) 事件适配器一旦指定一个类实现了某个事件监听器接口,就必须实现这个监听器接口的所有方法,否则你只能将你的类定义为抽象类而无法定义这个类的实例。为了方便起见,Java语言提供了事件适配器Adapter类,用来实现含有多个方法的类。这些Adap

15、ter类中的方法是空的。你可以继承Adapter类,而且只需重写你所需要的方法。Adapter类的目的就是将那些具有很多方法的监听器接口集合成为一个抽象类,使用户不需要在程序中实现每个方法。Adapter类只是为了简化编程而提供的一种23 七月 2022中间转换工具,使程序员在定义监听器类时可以不必因直接实现监听器接口而被迫重写所有的抽象方法。下面通过捕获窗口事件说明使用事件监听器接口和事件适配器两种方法的编程方式。JFrame对象是窗口事件(WindowEvent)的事件源,下面指定一个监听器对象:MyListener listener=new MyListener(); frame.add

16、WindowListener(listener); 23 七月 2022监听器对象要实现WindowListener接口。WindowListener接口中共有7个方法,它们分别对应如下个窗口事件:public interface WindowListenervoid windowOpened(WindowEvent e);void windowClosing(WindowEvent e);void windowClosed(WindowEvent e);void windowIconified(WindowEvent e);void windowDeiconified(WindowEvent

17、 e);void windowActivated(WindowEvent e);void windowDeactivated(WindowEvent e); 23 七月 20221.WindowListener接口的实现方法一定义一个类来实现WindowListener接口,根据需要在相应的方法中添加需要的代码,然后让其他方法为空即可。23 七月 2022例9-4 使用事件监听器接口方法关闭窗口。例9-5 使用事件适配器方法关闭窗口。23 七月 2022提示:因Java单继承机制的限制,若要定义监听器类需要同时处理两个以上的GUI事件,则只能直接实现有关的监听器接口,而无法通过继承适配器类实现

18、。(五) 内部类和匿名类在Java事件处理中的应用为了更好地加强类之间的联系,在Java中可以把一个类声明为另一个类的成员,这样的类称为被包容的类。被包容的类可以无条件地使用包容它的类的所有成员,包括私有成员。和其他类成员一样,被包容的类可以被声明为静态类,非静态被包容的类称为内部类。23 七月 2022例9-6 使用内部类的方法,关闭窗口。23 七月 20221.import java.awt.*;2.import javax.swing.*;3.import java.awt.event.*;4.public class TestInnerClass /主类,注意此类不用继承5. 6. J

19、Frame f=new JFrame(TestInnerClass);7. public TestInnerClass()8. MyInner m=new MyInner();9. f.addWindowListener(m); /注册监听器 10. f.setSize(200,150);例9-6 使用内部类的方法,关闭窗口。23 七月 202211. f.setVisible(true);12.13.public static void main(String args) 14. new TestInnerClass();15.16.class MyInner extends WindowA

20、dapter/定义内部类17.18. public void windowClosing(WindowEvent e)19. System.exit(1);20. 21. 22. 例9-7 定义内部类作为监听者实现:单击按钮后改变窗口背景颜色。23 七月 2022代码如下:23 七月 202238任务三 常用事件任务要求:本任务要求掌握ActionEvent类的使用掌握选择事件处理ItemEvent类,掌握按键事件处理和鼠标事件处理。Swing的事件处理机制继续沿用AWT的事件处理机制,因此基本的事件处理需要使用java.awt.event包中的类,另外,java.swing.event包中也

21、增加了一些新的事件及其监听器接口。Swing中事件源及其对应的事件监听器接口如表9-2所示。23 七月 202223 七月 2022表9-2 Swing中事件源及其对应的事件监听器接口Swing事件源事件监听接口所属的包AbstractButtonJTextFieldTimerJDirectoryPane ActionListener java.awt.eventJScrollBarAdjustmentListenerjava.awt.eventJComponentAncestorListenerjavax.swing.eventDefaultCellEditorCellEditorListe

22、nerjavax.swing.eventAbstractButtonDefaultCaretJProgressBarJSliderJTabbedPane JViewport ChangeListenerjavax.swing.event23 七月 2022AbstractDocumentDocumentListenerjavax.swing.eventAbstractButtonJComboBoxItmeListenerjava.awt.eventJListListSelectionListenerjavax.swing.eventJMenuMenuListenerjavax.swing.ev

23、entAbstractActionJComponentTableColumn PropertyChangeListener java.awt.eventJTreeTreeSelectionListenerjavax.swing.eventJPopupMenuWindowListener(一) 激活构件事件处理使用ActionEvent类图形用户界面(Graphics User Interface,GUI)是采用图形方式显示的计算机操作用户界面。通过这个在前面的例子中,我们已经使用过ActionEvent类,当用户按下按钮(JButton)或是在文本框(JTextField)中输入文字后按Ent

24、er键时,便触发了激活构件事件(ActionEvent)。23 七月 2022ActionEven类只包含一个事件actionPerformed()。(1) 事件源包括:JButton、JTextField、JTextArea、JRadioButton、JCheckBox、jcomboBox、JMenuItem。(2) 需要实现的监听器接口为ActionListener。(3) 加入事件监听器为 addActionListener (监听器)。(4) 得理事件需要重写的方法为actionPerformed()。(5)ActionEvent类的主要方法如下。void setActionComma

25、nd(String ac):设置按钮动作命令。String getActionCommand():获取按钮动作命令。23 七月 2022例9-8 设置3个单选按钮,显示3门大学课程,用户选择后显示用户所选内容23 七月 2022代码如下:例9-9 使用组合框JcomboBox显示城市列表,如图9-9所示。用户选择列表选项后,在文本域内显示用户所选内容。23 七月 2022代码如下:(二) 选择事件处理使用ItemEvent类ItemEvent类中只包含一个事件ITEM_STATE_CHANGED。(1) 引发事件的动作包括: 改变复选框类JCheckbox对象的选中或不选中状态; 改变列表框类

26、JList对象选项的选中或不选中状态; 改变单选按钮类JRadioButton对象的选中或不选中状态.23 七月 2022(2) 需要实现的监听器接口为ItemListener。(3) 加入事件监听器为 addItemListener(监听器)。(4) 处理事件需要重写的方法为itemStateChanged()。(5)ItemEvent类的主要方法如下。public ItemSelectable getItemSelectable():返回引发选中状态变化事件的事件源。public Object getItem():返回引发选中状态变化事件的具体选项。public int getStateC

27、hange():返回具体的选中状态变化类型。23 七月 2022例9-10 使用复选框类JCheckbox设置两个选项:“粗体Bold”和“斜体Italic”,用户选择后,文本域中显示内容的字体会随之改变23 七月 2022代码如下:(三) 按键事件处理使用KeyEvent类处理键盘事件的程序要实现在java.awt.event包中定义的接口KeyListener,在这个接口中定义了未实现的键盘事件处理方法。KeyListener接口中有如下3个方法。(1)public void keyPressed(KeyEvente):处理按下键。(2)public void keyReleased(Ke

28、yEvente):处理松开键。(3)public void keyTyped(KeyEvente):处理敲击键盘。23 七月 2022Java对于用户按键的处理过程如下。假设当前键盘状态为小写状态,要输入一个大写字母“A”,我们的操作过程为:先按住Shift键不放,再按A键,然后松开。整个过程中Java会产生5个事件。(1) 按下Shift键:为VK_SHIFT调用keyPressed方法。(2) 按下A键:为VK_A调用keyPressed方法。(3) 输入字符“A”:为字符“A”调用keyTyped方法。(4) 松开A键:为VK_A调用keyReleased方法。(5) 松开Shift键:

29、为VK_SHIFT调用keyReleased方法。23 七月 2022为识别引发键盘事件的按键,常用到KeyEvent类的如下方法。(1)public char getKeyChar():返回该事件中键的字符。例如,shift + a按键事件的返回值为A。(2)public static String getKeyText(int keyCode):返回描述键代码的字符串。例如,HOME、F1 或A等。 23 七月 2022例9-11 以KeyListener接口处理KeyEvent事件。设计窗口布局,在窗口上方放置一个文本框,在窗口下方放置一个文本域,如图9-13所示。当用户操作键盘时,输入的字符显示在上方文本框中,触发事件的名称显示在下方文本域中。23 七月 2022代码如下:例9-12 以适配器方法处理KeyEvent事件。23 七月 2022(四) 鼠标事件处理处理鼠标事件的程序要实现在java.awt.event包中定义的两个接口MouseListener和MouseMotionL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论