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

PPT
  • 阅读 115 次
  • 下载 0 次
  • 页数 70 页
  • 大小 1.079 MB
  • 2022-11-12 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
Java语言程序设计与实现项目九-Java的事件处理机制
可在后台配置第一页与第二页中间广告代码
Java语言程序设计与实现项目九-Java的事件处理机制
可在后台配置第二页与第三页中间广告代码
Java语言程序设计与实现项目九-Java的事件处理机制
可在后台配置第三页与第四页中间广告代码
Java语言程序设计与实现项目九-Java的事件处理机制
Java语言程序设计与实现项目九-Java的事件处理机制
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 70
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】Java语言程序设计与实现项目九-Java的事件处理机制.ppt,共(70)页,1.079 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-2315.html

以下为本文档部分文字说明:

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

程序(一)事件处理机制概述•事件处理技术是Java用户界面设计中一个十分重要的技术。用户在图形用户界面中输入命令是通过移动鼠标或单击特定界面元素来实现的。为了能够接收用户的命令,界面系统首先应该能够识别这些鼠标或键盘的操作并做出相应的反应。

通常,一个键盘或鼠标的操作会激发一个系统预先定义好的事件,用户只需要设计程序代码定义每个特定事件发生时所对应的响应操作,这些程序代码将在它们对应的事件发生时由系统自动调用。在第8章编写的程序中,对按钮等组件

进行单击操作,都没有什么反应,就是因为没有为事件编写相应的处理程序。Java.awt.event包中包含了许多用来处理事件的类和接口。2022年11月12日星期六(二)Java事件处理的基本概念1.事件如果用户单击了某个按钮,或组件的状态发生了某种变化,或按下了某个键盘键等,此时都认为产生了某

个事件(Event)。事件是系统在捕获用户界面操作过程中产生的代表相应操作的一个数据结构,是用户操作在Java系统内的数字表达,它描述了发生了什么事情。用户与用户界面上的组件交互是通过响应各种事件来实现的,如用户单击了一个按钮,意味

着发生了一个按钮事件。2022年11月12日星期六2.事件源(EventSource)产生事件的组件称事件源。例如,若用户用鼠标单击了按钮对象button,则该按钮button就是事件源。3.监听器监听器(Listener)是调用

事件处理方法的对象,它能够对事件源进行监听,以便对事件源所发生的事件做出相应的处理。事件源通过调用相应的方法将某个对象作为自己的监听器,如文本框可以调用以下方法注册监听器:addActionListener(监听器)4.事件注册事件

源为了将其上产生的事件传递给监听器接收并处理,应该提供注册和注销事件监听器的方法。注册监听器用于使该事件源上发生的事件能够被监听器接收并处理,注销监听器用于使监听器不能监听到该事件源上发生的事件。2022年11月12日星期六5.监听器接口监听器接口(事件处理方法)是能够接收

、解析和处理事件类对象、实现和用户交互的方法。监听器是一个对象,为了处理事件源发生的事件,监听器会自动调用一个方法。Java规定,为了使监听器能够对事件源所发生的事件做出处理,创建该监听器的类必须声名实现相应的接口,即必须在类体中给出该

接口中所有方法的方法体。那么当事件源发生事件时,监听器就会自动调用执行被类实现的某个接口方法。2022年11月12日星期六6.授权处理模型同一个事件源上可能发生多种事件。就像学校每天可能有多种事情会发生,如学生的学籍注册、专业选择、班级分配、宿舍安排、选修课程等,学校会安排(授权)不

同的部门进行管理,如财务处管理学生学籍注册、教务管理专业选择、教学系管理班级分配等。2022年11月12日星期六•Java对事件的处理采取了这种称为授权处理机制(DelegationModel)的方式,事件源可以把在其自身所有可能

发生的事件分别授权给不同的事件处理者来处理。如在一个按钮对象上既可能发生鼠标单击事件,也可能发生鼠标双击事件,该按钮对象可以授权给两个事件处理者分别来处理单击事件和双击事件。有时也将事件处理者称为监听器,监

听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。也就是说,事件源和事件处理是分开的,一般组件都不处理自己的

事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。如图9-1所示。2022年11月12日星期六2022年11月12日星期六框架按钮动作事件监听器-处理程序例9-1设计一个窗口,窗口中有一个按钮,当该按钮被按下时,显示"HelloJav

a."消息提示框。2022年11月12日星期六代码如下:2022年11月12日星期六13任务二事件监听与处理任务要求:本任务要求掌握Java事件处理步骤,包括如何确定事件监听器接口,给组件注册监听器和在程序中

定义类来实现监听器接口,重写接口中的所有方法。2022年11月12日星期六Java运行时系统会生成ActionEvent类的对象actionE,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收Java

运行时系统传递过来的事件对象actionE并进行相应的处理。Java事件处理如图9-3所示,通常包含以下3个步骤。(1)确定事件监听器的接口。(2)给组件注册监听器。(3)在程序中定义类来实现监听器接口,重写接口中的所有方法。2022年11月

12日星期六(一)事件监听器接口不同事件源上发生的事件种类是不同的,由不同的监听器处理。每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。例如:(1)JButton(按钮)对象作为事件源可能引发ActionE

vent类代表的事件ACTION_PERFORMED.(2)JCheckbox(复选框)对象等作为事件源可能引发的事件为ITEM_STATE_CHANGES。2022年11月12日星期六•编写事件处理程序时,首先应确定关注的事件属于何种监听器类

型。•系统提供的监听器是接口,它们定义在java.awt.event包中。•表9-1列出了所有AWT事件及其相应的监听器接口,共10类事件,11个接口。2022年11月12日星期六2022年11月12

日星期六事件类别描述信息接口名方法ActionEvent激活构件ActionListeneractionPerformed(ActionEvent)ItemEvent选择了某些项ItemListeneritemStateChanged(ItemEven

t)MouseEvent鼠标移动MouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)鼠标点击等MouseListenermousePressed(MouseEvent)mou

seReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)2022年11月12日星期六KeyEvent键盘输入KeyListenerkeyPressed(K

eyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusEvent构件收到或失去焦点FocusListenerfocusGained(FocusEvent)focusLost(Focus

Event)AdjustmentEvent移动了滚动条等构件AdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentEvent对象移动、缩放、显示隐藏等ComponentListenercompon

entMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShow

n(ComponentEvent)2022年11月12日星期六WindowEvent窗口收到窗口级事件WindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)w

indowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEv

ent)windowDeactivated(WindowEvent)ContainerEvent容器中增加、删除了构件ContainerListenercontainerAdded(containerEvent)containerRemoved(containerEvent)TextEvent文本

字段或文本域发生改变TextListenertextValueChanged(TextEvent)•Java语言类的层次非常分明,因而只支持单继承。为了实现多重继承的能力,Java用接口来实现,一个类可以实现多个接口,这

种机制比多重继承具有更简单、更灵活、更强大的功能。在AWT中就经常用到声明和实现多个接口。是无论实现了几个接口,接口中已定义的方法必须一一实现,虽然某些方法不需要具体的操作,但可以用空的方法体来代替,但必须所有方法都要写上。2022年11月12日星期六(二)

事件源的注册在确定了监听器的类型后,要用事件源类的注册方法来注册一个监听器类的对象。这样事件源产生的事件会传送给已注册的处理该类事件的监听器对象,该对象将自动调用相应的事件处理方法来处理该事件。注册监听器可使用下列方法:事件源对象.add事件监听器(事件监听器对象);2022年11

月12日星期六(三)事件的相应处理完成事件源注册后,要调用事件源本身的相关方法向监听者进行注册。当事件源上发生监听者可以处理的事件时,事件源把这个事件作为实际参数传递给监听者中负责这类事件的方法,这个方法被系统自动调用执行后,事件就得到了处理。

2022年11月12日星期六例9-2设计3个按钮,单击不同的按钮时,在窗口背景会显示不同的颜色。2022年11月12日星期六代码如下:例9-3在文本框中输入用户名和密码,当输入完按Enter键后,将输入的内容会通过消息提示框显示出来。2

022年11月12日星期六代码如下:(四)事件适配器一旦指定一个类实现了某个事件监听器接口,就必须实现这个监听器接口的所有方法,否则你只能将你的类定义为抽象类而无法定义这个类的实例。为了方便起见,Java语言提供了事件适配器

Adapter类,用来实现含有多个方法的类。这些Adapter类中的方法是空的。你可以继承Adapter类,而且只需重写你所需要的方法。Adapter类的目的就是将那些具有很多方法的监听器接口集合成为一个抽象类,使用户不需要在程序

中实现每个方法。Adapter类只是为了简化编程而提供的一种2022年11月12日星期六中间转换工具,使程序员在定义监听器类时可以不必因直接实现监听器接口而被迫重写所有的抽象方法。下面通过捕获窗口事件说明使用事件监听器接口和事件适配器两种方法的

编程方式。JFrame对象是窗口事件(WindowEvent)的事件源,下面指定一个监听器对象:MyListenerlistener=newMyListener();frame.addWindowLis

tener(listener);2022年11月12日星期六监听器对象要实现WindowListener接口。WindowListener接口中共有7个方法,它们分别对应如下个窗口事件:publicinterfaceWindowListe

ner{voidwindowOpened(WindowEvente);voidwindowClosing(WindowEvente);voidwindowClosed(WindowEvente);voidwindowIconified(Wind

owEvente);voidwindowDeiconified(WindowEvente);voidwindowActivated(WindowEvente);voidwindowDeactivated(WindowEvente);

}2022年11月12日星期六1.WindowListener接口的实现方法一定义一个类来实现WindowListener接口,根据需要在相应的方法中添加需要的代码,然后让其他方法为空即可。2022年11月12日星期六例9-4使用事件监听器接口方法关闭窗口。例9-5使用事件

适配器方法关闭窗口。2022年11月12日星期六提示:因Java单继承机制的限制,若要定义监听器类需要同时处理两个以上的GUI事件,则只能直接实现有关的监听器接口,而无法通过继承适配器类实现。(五)内部类和匿名类在Java事件处理中的

应用为了更好地加强类之间的联系,在Java中可以把一个类声明为另一个类的成员,这样的类称为被包容的类。被包容的类可以无条件地使用包容它的类的所有成员,包括私有成员。和其他类成员一样,被包容的类可以被声明为静态类,非静态被包容的类称为内部类。2022年11

月12日星期六例9-6使用内部类的方法,关闭窗口。2022年11月12日星期六1.importjava.awt.*;2.importjavax.swing.*;3.importjava.awt.event.*;4.publicclassTestInnerClass//主类,注意此类

不用继承5.{6.JFramef=newJFrame("TestInnerClass");7.publicTestInnerClass(){8.MyInnerm=newMyInner();9.f.addWindowListener(m);//注册监听器10.f.setSi

ze(200,150);例9-6使用内部类的方法,关闭窗口。2022年11月12日星期六11.f.setVisible(true);12.}13.publicstaticvoidmain(String[]arg

s){14.newTestInnerClass();15.}16.classMyInnerextendsWindowAdapter//定义内部类17.{18.publicvoidwindowClosing(WindowEvente){19.System.exit(1);20.}21.}22.

}例9-7定义内部类作为监听者实现:单击按钮后改变窗口背景颜色。2022年11月12日星期六代码如下:2022年11月12日星期六38任务三常用事件任务要求:本任务要求掌握ActionEvent类的使用掌握选择事件处理I

temEvent类,掌握按键事件处理和鼠标事件处理。Swing的事件处理机制继续沿用AWT的事件处理机制,因此基本的事件处理需要使用java.awt.event包中的类,另外,java.swing.event包中也增加了一些新的事件及其监听器接口。Swing中事件源及其

对应的事件监听器接口如表9-2所示。2022年11月12日星期六2022年11月12日星期六表9-2Swing中事件源及其对应的事件监听器接口Swing事件源事件监听接口所属的包AbstractButtonJTextFie

ldTimerJDirectoryPaneActionListenerjava.awt.eventJScrollBarAdjustmentListenerjava.awt.eventJComponentAncestorList

enerjavax.swing.eventDefaultCellEditorCellEditorListenerjavax.swing.eventAbstractButtonDefaultCaretJProgressBarJSliderJTabbedPaneJV

iewportChangeListenerjavax.swing.event2022年11月12日星期六AbstractDocumentDocumentListenerjavax.swing.eventAbstractButtonJComboBoxItmeListenerjava.

awt.eventJListListSelectionListenerjavax.swing.eventJMenuMenuListenerjavax.swing.eventAbstractActionJComponentTableColumnPropertyC

hangeListenerjava.awt.eventJTreeTreeSelectionListenerjavax.swing.eventJPopupMenuWindowListener(一)激活构件事件处理——使用ActionEvent类图形用户界面

(GraphicsUserInterface,GUI)是采用图形方式显示的计算机操作用户界面。通过这个在前面的例子中,我们已经使用过ActionEvent类,当用户按下按钮(JButton)或是在文本框(JTextFiel

d)中输入文字后按Enter键时,便触发了激活构件事件(ActionEvent)。2022年11月12日星期六ActionEven类只包含一个事件actionPerformed()。(1)事件源包括:JButton、JTextField、JTextAr

ea、JRadioButton、JCheckBox、jcomboBox、JMenuItem。(2)需要实现的监听器接口为ActionListener。(3)加入事件监听器为addActionListener(监听器)。(4)得理事件需要重写的方法为actionPerform

ed()。(5)ActionEvent类的主要方法如下。①voidsetActionCommand(Stringac):设置按钮动作命令。②StringgetActionCommand():获取按钮动作命令。2022年11月12日星期六例9-8设置3个单选按钮,显示

3门大学课程,用户选择后显示用户所选内容2022年11月12日星期六代码如下:例9-9使用组合框JcomboBox显示城市列表,如图9-9所示。用户选择列表选项后,在文本域内显示用户所选内容。2022年11月12日星期六代码如下:(二)选择事件处理——使用ItemEvent类•ItemE

vent类中只包含一个事件ITEM_STATE_CHANGED。•(1)引发事件的动作包括:•①改变复选框类JCheckbox对象的选中或不选中状态;•②改变列表框类JList对象选项的选中或不选中状

态;•③改变单选按钮类JRadioButton对象的选中或不选中状态.2022年11月12日星期六(2)需要实现的监听器接口为ItemListener。(3)加入事件监听器为addItemListener(监听器)。(4)处理事件需要重写的方法为itemStateChanged()。(

5)ItemEvent类的主要方法如下。①publicItemSelectablegetItemSelectable():返回引发选中状态变化事件的事件源。②publicObjectgetItem():返回引发选中状态变化事件的具体选项。③publi

cintgetStateChange():返回具体的选中状态变化类型。2022年11月12日星期六例9-10使用复选框类JCheckbox设置两个选项:“粗体Bold”和“斜体Italic”,用户选择后,文本域中显示内容的字体会随之改变2022年11月12日星期六代码如下:(三)按键事件处理——

使用KeyEvent类处理键盘事件的程序要实现在java.awt.event包中定义的接口KeyListener,在这个接口中定义了未实现的键盘事件处理方法。KeyListener接口中有如下3个方法。(1)publicvoidkeyPressed(KeyEvente):

处理按下键。(2)publicvoidkeyReleased(KeyEvente):处理松开键。(3)publicvoidkeyTyped(KeyEvente):处理敲击键盘。2022年11月12日星期六Java对于用户按键的

处理过程如下。假设当前键盘状态为小写状态,要输入一个大写字母“A”,我们的操作过程为:先按住Shift键不放,再按A键,然后松开。整个过程中Java会产生5个事件。(1)按下Shift键:为VK_SHIFT调用keyPressed方法。(2)按下A键:为VK_A调用keyPresse

d方法。(3)输入字符“A”:为字符“A”调用keyTyped方法。(4)松开A键:为VK_A调用keyReleased方法。(5)松开Shift键:为VK_SHIFT调用keyReleased方法。2022年11月12日

星期六为识别引发键盘事件的按键,常用到KeyEvent类的如下方法。(1)publicchargetKeyChar():返回该事件中键的字符。例如,shift+a按键事件的返回值为"A"。(2)publicstaticStringget

KeyText(intkeyCode):返回描述键代码的字符串。例如,"HOME"、"F1"或"A"等。2022年11月12日星期六例9-11以KeyListener接口处理KeyEvent事件。设计窗口布局,在窗口上方放置一个文本框,在窗口下方放置一个文本域,如图9-13所示。当用户操作键盘时,

输入的字符显示在上方文本框中,触发事件的名称显示在下方文本域中。2022年11月12日星期六代码如下:例9-12以适配器方法处理KeyEvent事件。2022年11月12日星期六(四)鼠标事件处理•处理鼠标事件的程序要实现在j

ava.awt.event包中定义的两个接口MouseListener和MouseMotionListener,在这两个接口中定义了未实现的鼠标事件处理方法。2022年11月12日星期六接口MouseListener中的方法如下。(1)mousePress

ed(MouseEvente):鼠标左键被按下时调用。(2)mouseClicked(MouseEvente):鼠标单击事件。(3)mouseReleased(MouseEvente):鼠标右键被释放时调用。(4)mouseEntered(

MouseEvente):鼠标进入当前窗口时调用。(5)mouseExited(MouseEvente):鼠标离开当前窗口时调用。2022年11月12日星期六接口MouseMotionListener中的方法如下。(1)mouseDragged(MouseEven

te)处理鼠标拖动事件。(2)mouseMoved(MouseEvente)处理鼠标移动事件。对应上述接口,对应的注册监听器的方法是addMouseListener()和addMouseMotionListener()。另外

,MouseEvent类的方法getX()、getY()常用来获取鼠标当前所在位置的坐标,它们的格式如下:publicintgetX()publicintgetY()2022年11月12日星期六例9-13在窗口中拖动鼠标,

显示鼠标所在位置的坐标并输出与鼠标操作相应的字符串。2022年11月12日星期六•例9-14通过单击鼠标来画红色的方框。代码如下:2022年11月12日星期六65任务四拓展实训任务要求:本任务要求了解如何使用Java的事件处理机制,掌握为不同组件编写事件处理程序的方法。实训9-1将两个字符串连

接起来。学会按钮事件的处理方法。2022年11月12日星期六实训9-2制作一个用户登录的窗口。学会文本框等事件的处理方法。2022年11月12日星期六实训9-3实现简易文件编辑器功能,共有两个下拉式菜单,一个包含新建,打开文件和退出三个菜单项,另一个包含剪切和复制

共两个菜单项。选择退出菜单项时,退出程序;选择剪切菜单项时,剪切变为不可选而复制可选;选择复制菜单项时,复制变为不可选而剪切可选。2022年11月12日星期六实训9-4在窗口中用捕捉鼠标的左键、右键和中间滑轮事件,同时

将当前鼠标的坐标位置在窗口中输出。2022年11月12日星期六Thankyou!!!2022年11月12日星期六

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?