当前位置:文档之家› 第13章事件处理(第4版)

第13章事件处理(第4版)


实现上述的接口,针对想要捕获的事件编写方法代码 。如要捕获单击按钮事件,就要为ActionListener接口 里的actionPerformed()方法编写代码。
为事件监听者创建一个对象,让自己的组件和方法完 成对它的注册,方法是在监听者接口的名字里加入一 个前缀“add”,如addActionListener()
待用户通过鼠标、键盘给它通知(消息驱动), 它再根据这个通知的内容进行相应的处理(事件 驱动)。 通常一个键盘或鼠标操作会引发一个系统预先定 义好的事件,用户只需编写代码,定义每个特定 事件发生时程序应做出何种响应即可。
3
13.1 委托事件处理
事件(event):用户使用鼠标或键盘对窗口中的组 件进行交互时所发生的事情。对这些事件做出响 应的程序,称为事件处理程序(Event Handler)。
见教材例13.5
20
13.6 文本组件及相应的事件处理
文本组件所触发的事件主要有动作事件 ActionEvent和文本变化事件CaretEvent 。 见教材例13.6
21
13.7 窗口组件及窗口事件处理
Window类的任何子类都可能触发下列的窗口事 件:打开窗口、正在关闭窗口、关闭窗口、激活窗 口、变成非活动窗口、最小化窗口和还原窗口。 Window类常用方法见教材表13.8
5
13.1 委托事件处理
Java语言规定:为了让监听者能对事件源发生的 事件进行处理,创建该监听者对象的类必须声明 实现相应的监听者接口或继承相应的适配类,即 必须在类体中具体定义该接口中所有方法的方法 体或覆盖适配器类中的相应方法,以供监听者自 动调用相应事件处理方法来完成对应事件的任务 ,这些处理事件的方法就是事件处理程序。
JCheckBoxMenuItem类的构造方法及常用方法 见教材表13.30、13.31。
用按键适配器类KeyAdapter处理KeyEvent事件
见教材例13.9
24
13.10 鼠标事件类MouseEvent
用鼠标单击事件源、鼠标指针进入或离开事件 源,或移动、拖动鼠标等操作,均会触发鼠标事 主要用于处理 件。 多于一个鼠标 事件的情况。 该类常用方法见教材表 13.17 处理鼠标事件MouseEvent的监听者是实现 MouseListener接口或MouseMotionListener接口: 必须实现教材表13.18中5个用于处理不同鼠标事件 的方法。(注意: mousePressed 、mouseClicked、 和mouseReleased 触发顺序。)
7
13.1 委托事件模型
总的来说,委托事件模型是由产生事件的对象( 事件源)、事件对象以及事件监听者对象之间的关系 所组成。而其中的“事件监听者”就是用来处理事件 的对象,也就是说,监听者对象会等待事件的发生, 并在事件发生时收到通知。事件源会在事件产生时, 将相关于该事件的信息封装在一个对象中,称之为“ 事件对象”,并将该对象传递给事件监听者,监听者 就可以根据该“事件对象”内的信息决定适当的处理 方式,即调用相应的事件处理程序。
17
为某些监听者接口提供了适配器类XXXAdapter, 当需要对某种事件进行处理时,只需让事件处理 类继承事件所对应的适配器类,就可以只覆盖本
13.3 适配器类
次操作用到的事件处理方法即可。
当一个类需要处理多种事件时,通过继承适配器的 方法就不可行了,但可以基于适配器类,用内部类 的方法处理。 若想用作事件监听者的类已经继承了别的类,就 不能再继承适配器类,只能去实现监听者接口。 监听者接口与对应的适配器类见教材表13.3
14
13.2 Java语言的事件类
• 对于每一个事件类,几乎都有相应的事件监听者 。监听者接口多数都是继承自 java.util.EventListener接口。图13.4列出了事件监 听者接口之间的继承关系。
事件类、事件监听者接口和监听者接口中提供的 方法关系列表见教材中表13.1。
15
13.2 Java语言的事件类
窗口事件的监听者是WindowListener接口,具体 方法见教材表13.9
见教材例13.7
22
13.8 对话框设计及相应的事件处理
JDialog是Swing中提供的用来实现自定义的对话 框, JDialog类也属于顶层容器,其默认的布局管 理器为BorderLayout。 JDialog有模式和非模式两种方式。
象.addXXXLister(监 监听者有专门的方法用于处理事件,具体在哪 听者对象)
个组件上发生事件后由哪个监听者处理,必须 事前用“组件名.addXXXLister( )”进行注册。
11
13.1 委托事件模型
定义内部类来担任监听者 通常将实现接口的类定义在主类里,使之成为 它的内部类(内部类可以访问外部类的所有成 员) 见教材例13.2。
8
13.1 委托事件模型
• 例如,当按钮被鼠标单击时,会触发一个“操作事 件”(Action event),Java程序就会产生一个“事 件对象”来表示这个事件,然后把这个“事件对象 ”传递给“事件监听者”,“事件监听者”再依据 “事件对象”的种类把工作指派给事件处理者,即 事件处理程序。在这里按钮就是一个事件源。 • 为了让“事件源”(如按钮)知道要把事件信息传 递给哪一个“事件监听者”,事先必须把“事件监 听者”向“事件源”注册(register),这个操作也就 是告知“事件源”要把事件信息传递给它。图13.1 说明了“委托事件模型”的工作原理。
窗口菜单:
窗口菜单是相对于窗口的,它出现在窗口标题 栏的下面,总是与窗口同时出现。也不能被布 局管理器所控制。
30
13.13 菜单设计
窗口菜单:
菜单在菜单中除了上面介绍的菜单项外,还有 一种带复选框的菜单项,它的前面有一个复选 标记:“”表示选中,“”表示未选中。 这种菜单项的功能是由JCheckBoxMenuItem类 所实现的。
使列表框具有滚动功能,可以通过创建一个滚动 窗格JScrollPane的对象,然后将列表框添加到其 中即可。
列表框中可选项的序号是从0开始的。 JList类的构造方法和常用方法见教材表13.20、 13.21。应用 见教材13.11。
27
13.12 组合框及相应的处理
组合框(combo box)也称为下拉列表框(drop-down list),单击下拉列表框右边的向下箭头,然后从 伸展开的选项框中选择一个选项即可。 JComboBox的构造方法及常用方法见教材表13.22 和13.23。 在组合框中进行选择某个选项的操作时会触发 ItemEvent 事件,然后即将事件处理的程序代码 编写在itemStateChanged()方法中。另外,当组合 框处于可编辑状态时,也可以触发ActionEvent事 件。应用见教材例13.12 28
事件处理程序:Java语言中包含了许多用来处理 事件的接口和类。用于事件处理的方法就声明在 这些类或接口中。这些包含有事件处理方法的接 口称为监听者接口,包含有事件处理方法的类称 为适配器类。监听者负责处理事件源发生的事件 ,为了处理事件源发生的事件,监听者会自动调 用一个方法来处理事件。这些处理事件的方法就 是事件处理程序。
事件源(event source):能够产生事件的对象。如 按钮、鼠标、文本框、键盘等。
事件监听者(listener):监听者有专门的方法来处 理事件,事件监听者是一个对事件源进行监视的 对象,当事件源上发生事件时,事件监听者能够 监听到,并调用相应的方法对发生的事件做出相 应的处理。 4
13.1 委托事件处理
.18
13.4 命令按钮及相应的事件处理
命令按钮所触发的事件是动作事件。动作事件类 ActionEvent,也称为操作事件类。
操作事件类的主要数据成员和成员方法见教材表 13.4、13.5 见教材例13.4
19
13.5复选框、单选按钮及相应的 事件处理
• JRadioButton、JCheckBox与JToggleButton除了与 JButton一样都会触发ActionEvent操作事件外, JRadioButton、JCheckBox以及JToggleButton还会 触发ItemEvent事件。 表13.6给出了事件类ItemEvent的主要成员变量, 表13.7给出的是ItemEvent类的常用方法
每当在事件源上发生一个操作时,就会产生相应 的事件对象。
事件源与其产生的事件对象的对应关系见教材表 13.2。
16
13.2 Java的事件处理类
Java语言中处理事件的具体方法:
确认触发的事件,取得事件类的名字,如ActionEvent ,去掉其中的“Event”字样。在剩下的部分加入 “Listener”,这就是在类里需要实现的事件监听者 接口。
通过使用JOptionPane类创建以下四种标准对话框
教材中的表13.13给出了创建标准对话框的方法。
应用例子见教材例13.13。
23
13.9 按键事件类KeyEvent
当用户在键盘上输入字符时便会触发此类事件。 表13.14列出了按键事件类KeyEvent的主要方法, 表13.15列出了字符的键码值。 用按键事件接口KeyListener处理KeyEvent事件必 须以类实现KeyListener接口,该接口里声明了3个 方法,见教材表13.16。
9
13.1 委托事件模型
委托事件模型的工作原理:
10
13.1 委托事件模型
让包含“事件源”的对象来担任监听者
如何编写事件处理程序?见教材中例13.1。
为组件增加事件监听者的方法:由于每一个事 件类型都有一个相应的监听者接口,通常名为 XXXListener,其中XXX代表它所处理的事件 类型。在定义类时要实现该接口。 事件源对
12
13.1 委托事件模型
使用匿名内部类来担任监听者 使用匿名内部类充当监听者这种方式,使程序看 起来比较清楚明了。
相关主题