Java语言程序设计与实现项目九-Java的事件处理机制.ppt

上传人(卖家):三亚风情 文档编号:3372419 上传时间:2022-08-24 格式:PPT 页数:70 大小:1.08MB
下载 相关 举报
Java语言程序设计与实现项目九-Java的事件处理机制.ppt_第1页
第1页 / 共70页
Java语言程序设计与实现项目九-Java的事件处理机制.ppt_第2页
第2页 / 共70页
Java语言程序设计与实现项目九-Java的事件处理机制.ppt_第3页
第3页 / 共70页
Java语言程序设计与实现项目九-Java的事件处理机制.ppt_第4页
第4页 / 共70页
Java语言程序设计与实现项目九-Java的事件处理机制.ppt_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、项目九项目九 Java Java的事件处理机制的事件处理机制 任务一任务一 Java的事件处理的事件处理 任务二任务二 事件监听与处理事件监听与处理 任务三任务三 常用事件常用事件 任务四任务四 拓展实训拓展实训2022年8月8日星期一2任务一任务一 Java的事件处理的事件处理任务要求:任务要求:本任务要求了解本任务要求了解JavaJava事件处理机制的概述事件处理机制的概述掌握掌握JavaJava事件处理中事件、事件源、监听器等概念事件处理中事件、事件源、监听器等概念能够编写简单的能够编写简单的JavaJava事件处理程序事件处理程序 (一)(一)事件处理机制概述事件处理机制概述 事件处理

2、技术是Java用户界面设计中一个十分重要的技术。用户在图形用户界面中输入命令是通过移动鼠标或单击特定界面元素来实现的。为了能够接收用户的命令,界面系统首先应该能够识别这些鼠标或键盘的操作并做出相应的反应。通常,一个键盘或鼠标的操作会激发一个系统预先定义好的事件,用户只需要设计程序代码定义每个特定事件发生时所对应的响应操作,这些程序代码将在它们对应的事件发生时由系统自动调用。在第8章编写的程序中,对按钮等组件进行单击操作,都没有什么反应,就是因为没有为事件编写相应的处理程序。Java.awt.event包中包含了许多用来处理事件的类和接口。2022年8月8日星期一(二)(二)Java事件处理的基

3、本概念事件处理的基本概念1.事件如果用户单击了某个按钮,或组件的状态发生了某种变化,或按下了某个键盘键等,此时都认为产生了某个事件(Event)。事件是系统在捕获用户界面操作过程中产生的代表相应操作的一个数据结构,是用户操作在Java系统内的数字表达,它描述了发生了什么事情。用户与用户界面上的组件交互是通过响应各种事件来实现的,如用户单击了一个按钮,意味着发生了一个按钮事件。2022年8月8日星期一2.事件源(Event Source)产生事件的组件称事件源。例如,若用户用鼠标单击了按钮对象button,则该按钮button就是事件源。3.监听器监听器(Listener)是调用事件处理方法的对

4、象,它能够对事件源进行监听,以便对事件源所发生的事件做出相应的处理。事件源通过调用相应的方法将某个对象作为自己的监听器,如文本框可以调用以下方法注册监听器:addActionListener(监听器)4.事件注册事件源为了将其上产生的事件传递给监听器接收并处理,应该提供注册和注销事件监听器的方法。注册监听器用于使该事件源上发生的事件能够被监听器接收并处理,注销监听器用于使监听器不能监听到该事件源上发生的事件。2022年8月8日星期一5.监听器接口监听器接口(事件处理方法)是能够接收、解析和处理事件类对象、实现和用户交互的方法。监听器是一个对象,为了处理事件源发生的事件,监听器会自动调用一个方法

5、。Java规定,为了使监听器能够对事件源所发生的事件做出处理,创建该监听器的类必须声名实现相应的接口,即必须在类体中给出该接口中所有方法的方法体。那么当事件源发生事件时,监听器就会自动调用执行被类实现的某个接口方法。2022年8月8日星期一6.授权处理模型同一个事件源上可能发生多种事件。就像学校每天可能有多种事情会发生,如学生的学籍注册、专业选择、班级分配、宿舍安排、选修课程等,学校会安排(授权)不同的部门进行管理,如财务处管理学生学籍注册、教务管理专业选择、教学系管理班级分配等。2022年8月8日星期一 Java对事件的处理采取了这种称为授权处理机制(Delegation Model)的方式

6、,事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。如在一个按钮对象上既可能发生鼠标单击事件,也可能发生鼠标双击事件,该按钮对象可以授权给两个事件处理者分别来处理单击事件和双击事件。有时也将事件处理者称为监听器,监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。也就是说,事件源和事件处理是分开的,一般组件都不处理自己的事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。如图9-1所示。2022年8月8日星期一20

7、22年8月8日星期一例例9-1 设计一个窗口,窗口中有一个按钮,当该按钮被按下时,显示设计一个窗口,窗口中有一个按钮,当该按钮被按下时,显示Hello Java.消息提示框。消息提示框。2022年8月8日星期一代码如下:2022年8月8日星期一13任务二任务二 事件监听与处理事件监听与处理任务要求:任务要求:本任务要求掌握本任务要求掌握JavaJava事件处理步骤,包括如何确定事件处理步骤,包括如何确定事件监听器接口,给组件注册监听器和在程序中定事件监听器接口,给组件注册监听器和在程序中定义类来实现监听器接口,重写接口中的所有方法。义类来实现监听器接口,重写接口中的所有方法。2022年8月8日

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

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

10、t)ItemEvent选择了某些项ItemListeneritemStateChanged(ItemEvent)MouseEvent鼠标移动MouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)鼠标点击等MouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)2022年8月8日星期一KeyEvent键盘输入Key

11、ListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusEvent构件收到或失去焦点FocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)AdjustmentEvent移动了滚动条等构件AdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentEvent对象移动、缩放、显示隐藏等ComponentListenercomponentMoved(ComponentEvent)co

12、mponentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)2022年8月8日星期一WindowEvent窗口收到窗口级事件WindowListener windowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)

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

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

15、理的事件时,事件源把这个事件作为实际参数传递给监听者中负责这类事件的方法,这个方法被系统自动调用执行后,事件就得到了处理。2022年8月8日星期一例例9-2 设计设计3个按钮,单击不同的按钮时,在窗口背景会显示不同的颜色。个按钮,单击不同的按钮时,在窗口背景会显示不同的颜色。2022年8月8日星期一代码如下:例例9-3 在文本框中输入用户名和密码,当输入完按在文本框中输入用户名和密码,当输入完按Enter键后,将输入的内键后,将输入的内容会通过消息提示框显示出来。容会通过消息提示框显示出来。2022年8月8日星期一代码如下:(四)(四)事件适配器事件适配器一旦指定一个类实现了某个事件监听器接口

16、,就必须实现这个监听器接口的所有方法,否则你只能将你的类定义为抽象类而无法定义这个类的实例。为了方便起见,Java语言提供了事件适配器Adapter类,用来实现含有多个方法的类。这些Adapter类中的方法是空的。你可以继承Adapter类,而且只需重写你所需要的方法。Adapter类的目的就是将那些具有很多方法的监听器接口集合成为一个抽象类,使用户不需要在程序中实现每个方法。Adapter类只是为了简化编程而提供的一种2022年8月8日星期一中间转换工具,使程序员在定义监听器类时可以不必因直接实现监听器接口而被迫重写所有的抽象方法。下面通过捕获窗口事件说明使用事件监听器接口和事件适配器两种方

17、法的编程方式。JFrame对象是窗口事件(WindowEvent)的事件源,下面指定一个监听器对象:MyListener listener=new MyListener();frame.addWindowListener(listener);2022年8月8日星期一监听器对象要实现WindowListener接口。WindowListener接口中共有7个方法,它们分别对应如下个窗口事件:public interface WindowListenervoid windowOpened(WindowEvent e);void windowClosing(WindowEvent e);void w

18、indowClosed(WindowEvent e);void windowIconified(WindowEvent e);void windowDeiconified(WindowEvent e);void windowActivated(WindowEvent e);void windowDeactivated(WindowEvent e);2022年8月8日星期一1.WindowListener接口的实现方法一定义一个类来实现WindowListener接口,根据需要在相应的方法中添加需要的代码,然后让其他方法为空即可。2022年8月8日星期一例例9-4 使用事件监听器接口方法关闭窗口

19、。使用事件监听器接口方法关闭窗口。例例9-5 使用事件适配器方法关闭窗口。使用事件适配器方法关闭窗口。2022年8月8日星期一提示:因Java单继承机制的限制,若要定义监听器类需要同时处理两个以上的GUI事件,则只能直接实现有关的监听器接口,而无法通过继承适配器类实现。(五)(五)内部类和匿名类在内部类和匿名类在Java事件处理中的应用事件处理中的应用为了更好地加强类之间的联系,在Java中可以把一个类声明为另一个类的成员,这样的类称为被包容的类。被包容的类可以无条件地使用包容它的类的所有成员,包括私有成员。和其他类成员一样,被包容的类可以被声明为静态类,非静态被包容的类称为内部类。2022年

20、8月8日星期一例例9-6 使用内部类的方法,关闭窗口。使用内部类的方法,关闭窗口。2022年8月8日星期一1.import java.awt.*;2.import javax.swing.*;3.import java.awt.event.*;4.public class TestInnerClass/主类,注意此类不用继承5.6.JFrame f=new JFrame(TestInnerClass);7.public TestInnerClass()8.MyInner m=new MyInner();9.f.addWindowListener(m);/注册监听器 10.f.setSize(2

21、00,150);例例9-6 使用内部类的方法,关闭窗口。使用内部类的方法,关闭窗口。2022年8月8日星期一11.f.setVisible(true);12.13.public static void main(String args)14.new TestInnerClass();15.16.class MyInner extends WindowAdapter/定义内部类17.18.public void windowClosing(WindowEvent e)19.System.exit(1);20.21.22.例例9-7 定义内部类作为监听者实现:单击按钮后改变窗口背景颜色。定义内部类

22、作为监听者实现:单击按钮后改变窗口背景颜色。2022年8月8日星期一代码如下:2022年8月8日星期一38任务三任务三 常用事件常用事件任务要求:任务要求:本任务要求掌握本任务要求掌握ActionEventActionEvent类的使用类的使用掌握选择事件处理掌握选择事件处理ItemEventItemEvent类,类,掌握按键事件处理和鼠标事件处理。掌握按键事件处理和鼠标事件处理。Swing的事件处理机制继续沿用的事件处理机制继续沿用AWT的事件处理机的事件处理机制,因此基本的事件处理需要使用制,因此基本的事件处理需要使用java.awt.event包中的包中的类,另外,类,另外,java.s

23、wing.event包中也增加了一些新的事件包中也增加了一些新的事件及其监听器接口。及其监听器接口。Swing中事件源及其对应的事件监听器中事件源及其对应的事件监听器接口如表接口如表9-2所示。所示。2022年8月8日星期一2022年8月8日星期一表9-2 Swing中事件源及其对应的事件监听器接口Swing事件源事件源事件监听接口事件监听接口所属的包所属的包AbstractButtonJTextFieldTimerJDirectoryPane ActionListener java.awt.eventJScrollBarAdjustmentListener java.awt.eventJCo

24、mponentAncestorListenerjavax.swing.eventDefaultCellEditorCellEditorListenerjavax.swing.eventAbstractButtonDefaultCaretJProgressBarJSliderJTabbedPane JViewport ChangeListenerjavax.swing.event2022年8月8日星期一AbstractDocumentDocumentListenerjavax.swing.eventAbstractButtonJComboBoxItmeListenerjava.awt.event

25、JListListSelectionListenerjavax.swing.eventJMenuMenuListenerjavax.swing.eventAbstractActionJComponentTableColumn PropertyChangeListener java.awt.eventJTreeTreeSelectionListenerjavax.swing.eventJPopupMenuWindowListener(一)(一)激活构件事件处理激活构件事件处理使用使用ActionEvent类类图形用户界面(Graphics User Interface,GUI)是采用图形方式显示

26、的计算机操作用户界面。通过这个在前面的例子中,我们已经使用过ActionEvent类,当用户按下按钮(JButton)或是在文本框(JTextField)中输入文字后按Enter键时,便触发了激活构件事件(ActionEvent)。2022年8月8日星期一ActionEven类只包含一个事件actionPerformed()。(1)事件源包括:JButton、JTextField、JTextArea、JRadioButton、JCheckBox、jcomboBox、JMenuItem。(2)需要实现的监听器接口为ActionListener。(3)加入事件监听器为 addActionListe

27、ner(监听器)。(4)得理事件需要重写的方法为actionPerformed()。(5)ActionEvent类的主要方法如下。void setActionCommand(String ac):设置按钮动作命令。String getActionCommand():获取按钮动作命令。2022年8月8日星期一例例9-8 设置设置3个单选按钮,显示个单选按钮,显示3门大学课程,用户选择后显示用户所选内容门大学课程,用户选择后显示用户所选内容2022年8月8日星期一代码如下:例例9-9 使用组合框使用组合框JcomboBox显示城市列表,如图显示城市列表,如图9-9所示。用户选择列表选所示。用户选择

28、列表选项后,在文本域内显示用户所选内容。项后,在文本域内显示用户所选内容。2022年8月8日星期一代码如下:(二)(二)选择事件处理选择事件处理使用使用ItemEvent类类 ItemEvent类中只包含一个事件ITEM_STATE_CHANGED。(1)引发事件的动作包括:改变复选框类JCheckbox对象的选中或不选中状态;改变列表框类JList对象选项的选中或不选中状态;改变单选按钮类JRadioButton对象的选中或不选中状态.2022年8月8日星期一(2)需要实现的监听器接口为ItemListener。(3)加入事件监听器为 addItemListener(监听器)。(4)处理事件

29、需要重写的方法为itemStateChanged()。(5)ItemEvent类的主要方法如下。public ItemSelectable getItemSelectable():返回引发选中状态变化事件的事件源。public Object getItem():返回引发选中状态变化事件的具体选项。public int getStateChange():返回具体的选中状态变化类型。2022年8月8日星期一例例9-10 使用复选框类使用复选框类JCheckbox设置两个选项:设置两个选项:“粗体粗体Bold”和和“斜体斜体Italic”,用户选择后,文本域中显示内容的字体会随之改变,用户选择后,文

30、本域中显示内容的字体会随之改变2022年8月8日星期一代码如下:(三)(三)按键事件处理按键事件处理使用使用KeyEvent类类处理键盘事件的程序要实现在java.awt.event包中定义的接口KeyListener,在这个接口中定义了未实现的键盘事件处理方法。KeyListener接口中有如下3个方法。(1)public void keyPressed(KeyEvent e):处理按下键。(2)public void keyReleased(KeyEvent e):处理松开键。(3)public void keyTyped(KeyEvent e):处理敲击键盘。2022年8月8日星期一Ja

31、va对于用户按键的处理过程如下。假设当前键盘状态为小写状态,要输入一个大写字母“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键:为VK_SHIFT调用keyReleased方法。2022年8月8日星期一为识别引发键盘事件的按键,常用到KeyEvent类的如下方法。(1)pub

32、lic char getKeyChar():返回该事件中键的字符。例如,shift+a按键事件的返回值为A。(2)public static String getKeyText(int keyCode):返回描述键代码的字符串。例如,HOME、F1 或A等。2022年8月8日星期一例例9-11 以以KeyListener接口处理接口处理KeyEvent事件。设计窗口布局,在窗口上方事件。设计窗口布局,在窗口上方放置一个文本框,在窗口下方放置一个文本域,如图放置一个文本框,在窗口下方放置一个文本域,如图9-13所示。当用户操作所示。当用户操作键盘时,输入的字符显示在上方文本框中,触发事件的名称显

33、示在下方文本键盘时,输入的字符显示在上方文本框中,触发事件的名称显示在下方文本域中。域中。2022年8月8日星期一代码如下:例例9-12 以适配器方法处理以适配器方法处理KeyEvent事件。事件。2022年8月8日星期一(四)(四)鼠标事件处理鼠标事件处理 处理鼠标事件的程序要实现在java.awt.event包中定义的两个接口MouseListener和MouseMotionListener,在这两个接口中定义了未实现的鼠标事件处理方法。2022年8月8日星期一接口MouseListener中的方法如下。(1)mousePressed(MouseEvent e):鼠标左键被按下时调用。(2

34、)mouseClicked(MouseEvent e):鼠标单击事件。(3)mouseReleased(MouseEvent e):鼠标右键被释放时调用。(4)mouseEntered(MouseEvent e):鼠标进入当前窗口时调用。(5)mouseExited(MouseEvent e):鼠标离开当前窗口时调用。2022年8月8日星期一接口MouseMotionListener中的方法如下。(1)mouseDragged(MouseEvent e)处理鼠标拖动事件。(2)mouseMoved(MouseEvent e)处理鼠标移动事件。对应上述接口,对应的注册监听器的方法是addMous

35、eListener()和addMouseMotionListener()。另外,MouseEvent类的方法getX()、getY()常用来获取鼠标当前所在位置的坐标,它们的格式如下:public int getX()public int getY()2022年8月8日星期一例例9-13 在窗口中拖动鼠标,显示鼠标所在位置的坐标并输出与鼠标操作相在窗口中拖动鼠标,显示鼠标所在位置的坐标并输出与鼠标操作相应的字符串。应的字符串。2022年8月8日星期一例例9-14 通过单击鼠标来画红色的方框。通过单击鼠标来画红色的方框。代码如下:代码如下:2022年8月8日星期一65任务四任务四 拓展实训拓展实

36、训任务要求:任务要求:本任务要求了解如何使用本任务要求了解如何使用 Java Java 的事件处理机制,的事件处理机制,掌握为不同组件编写事件处理程序的方法。掌握为不同组件编写事件处理程序的方法。实训实训 9-1 将两个字符串连接起来。学会按钮事件的处理方法。将两个字符串连接起来。学会按钮事件的处理方法。2022年8月8日星期一实训实训 9-2 制作一个用户登录的窗口。学会文本框等事件的处理方法。制作一个用户登录的窗口。学会文本框等事件的处理方法。2022年8月8日星期一实训实训 9-3 实现简易文件编辑器功能,共有两个下拉式菜单,一个包含新建,实现简易文件编辑器功能,共有两个下拉式菜单,一个

37、包含新建,打开文件和退出三个菜单项,另一个包含剪切和复制共两个菜单项。选择退打开文件和退出三个菜单项,另一个包含剪切和复制共两个菜单项。选择退出菜单项时,退出程序;选择剪切菜单项时,剪切变为不可选而复制可选;出菜单项时,退出程序;选择剪切菜单项时,剪切变为不可选而复制可选;选择复制菜单项时,复制变为不可选而剪切可选选择复制菜单项时,复制变为不可选而剪切可选。2022年8月8日星期一实训实训 9-4 在窗口中用捕捉鼠标的左键、右键和中间滑轮事件,同时将当前鼠在窗口中用捕捉鼠标的左键、右键和中间滑轮事件,同时将当前鼠标的坐标位置在窗口中输出。标的坐标位置在窗口中输出。2022年8月8日星期一Thank you!2022年8月8日星期一

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Java语言程序设计与实现项目九-Java的事件处理机制.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|