第13章事件处理(第3版)_第1页
第13章事件处理(第3版)_第2页
第13章事件处理(第3版)_第3页
第13章事件处理(第3版)_第4页
第13章事件处理(第3版)_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第13章

事件处理1委托事件模型担任监听者的条件

Java语言的事件类菜单栏设计

工具栏设计师

定时器本章主要内容监听者接口与适配器类2事件及相应的事件处理13.1委托事件模型事件处理:为组件设计相应的程序,使组件能够响应并处理用户的操作。Java程序一旦构建完GUI,就不再工作,而是等待用户通过鼠标、键盘给它通知(消息驱动),它再根据这个通知的内容进行相应的处理(事件驱动)。通常一个键盘或鼠标操作会引发一个系统预先定义好的事件,用户只需编写代码,定义每个特定事件发生时程序应做出何种响应即可。消息处理和事件驱动是面向对象编程技术的主要特点。313.1委托事件处理事件(event):用户使用鼠标或键盘对窗口中的组件进行交互时所发生的事情。对这些事件做出响应的程序,称为事件处理程序(EventHandler)。事件源(eventsource):能够产生事件的对象。如按钮、鼠标、文本框、键盘等。事件监听者(listener):监听者有专门的方法来处理事件,事件监听者是一个对事件源进行监视的对象,当事件源上发生事件时,事件监听者能够监听到,并调用相应的方法对发生的事件做出相应的处理。413.1委托事件处理事件处理程序:Java语言中包含了许多用来处理事件的接口和类。用于事件处理的方法就声明在这些类或接口中。这些包含有事件处理方法的接口称为监听者接口,包含有事件处理方法的类称为适配器类。监听者负责处理事件源发生的事件,为了处理事件源发生的事件,监听者会自动调用一个方法来处理事件。这些处理事件的方法就是事件处理程序。513.1委托事件处理Java语言规定:为了让监听者能对事件源发生的事件进行处理,创建该监听者对象的类必须声明实现相应的监听者接口或继承相应的适配类,即必须在类体中具体定义该接口中所有方法的方法体或覆盖适配器类中的相应方法,以供监听者自动调用相应事件处理方法来完成对应事件的任务,这些处理事件的方法就是事件处理程序。613.1委托事件模型委托事件模型:是将事件源(如命令按钮)和对事件做出的具体处理(利用监听者实例来对事件进行具体的处理)分离开来。一般情况下,组件(事件源)不处理自己的事件,而是将事件处理委托给外部的处理实体(监听者)。当事件发生时,产生事件的对象即事件源,会把此“信息”转给事件监听者处理的一种方式,而这里所指的“信息”事实上就是java.awt.event事件类库里某个类所创建的对象,我们把它称为“事件对象”(Eventobject)。事件对象表示事件的内容,对象内部封装了一个对事件源eveutSource的引用和其他信息。事件对象(java.awt.event),表示事件的内容,内部封装了一个对事件源的引用等信息。713.1委托事件模型总的来说,委托事件模型是由产生事件的对象(事件源)、事件对象以及事件监听者对象之间的关系所组成。而其中的“事件监听者”就是用来处理事件的对象,也就是说,监听者对象会等待事件的发生,并在事件发生时收到通知。事件源会在事件产生时,将相关于该事件的信息封装在一个对象中,称之为“事件对象”,并将该对象传递给事件监听者,监听者就可以根据该“事件对象”内的信息决定适当的处理方式,即调用相应的事件处理程序。813.1委托事件模型例如,当按钮被鼠标单击时,会触发一个“操作事件”(Actionevent),Java程序就会产生一个“事件对象”来表示这个事件,然后把这个“事件对象”传递给“事件监听者”,“事件监听者”再依据“事件对象”的种类把工作指派给事件处理者,即事件处理程序。在这里按钮就是一个事件源。为了让“事件源”(如按钮)知道要把事件信息传递给哪一个“事件监听者”,事先必须把“事件监听者”向“事件源”注册(register),这个操作也就是告知“事件源”要把事件信息传递给它。图13.1说明了“委托事件模型”的工作原理。913.1委托事件模型委托事件模型的工作原理:1013.1委托事件模型委托事件模型的工作原理:11拟人法:监听者—老板组件—工人注册—老板向工人宣布“我是你的管理者,有事向我报告”事件发生—向老板报告事件处理者—老板选派人去完成任务13.1委托事件模型1213.1委托事件模型定义内部类来担任监听者通常将实现接口的类定义在主类里,使之成为它的内部类(内部类可以访问外部类的所有成员)见教材例13.2。1313.1委托事件模型使用匿名内部类来担任监听者使用匿名内部类充当监听者这种方式,使程序看起来比较清楚明了。见教材例13.3。1413.2Java语言的事件类

java.awt.event包和javax.swing.event包中定义了许多事件类用于处理各种用户操作所产生的事件。事件类的继承关系见教材图3.3。1513.2Java语言的事件类对于每一个事件类,几乎都有相应的事件监听者。监听者接口多数都是继承自java.util.EventListener接口。图13.4列出了事件监听者接口之间的继承关系。事件类、事件监听者接口和监听者接口中提供的方法关系列表见教材中表13.1。1613.2Java语言的事件类每当在事件源上发生一个操作时,就会产生相应的事件对象。事件源与其产生的事件对象的对应关系见教材表13.2。1713.2Java的事件处理类Java语言中处理事件的具体方法:确认触发的事件,取得事件类的名字,如ActionEvent,去掉其中的“Event”字样。在剩下的部分加入“Listener”,这就是在类里需要实现的事件监听者接口。实现上述的接口,针对想要捕获的事件编写方法代码。如要捕获单击按钮事件,就要为ActionListener接口里的actionPerformed()方法编写代码。为事件监听者创建一个对象,让自己的组件和方法完成对它的注册,方法是在监听者接口的名字里加入一个前缀“add”,如addActionListener()1813.3适配器类.1913.4命令按钮及相应的事件处理命令按钮所触发的事件是动作事件。动作事件类ActionEvent,也称为操作事件类。操作事件类的主要数据成员和成员方法见教材表13.4、13.5见教材例13.42013.5复选框、单选按钮及相应的事件处理JRadioButton、JCheckBox与JToggleButton除了与JButton一样都会触发ActionEvent操作事件外,JRadioButton、JCheckBox以及JToggleButton还会触发ItemEvent事件。表13.6给出了事件类ItemEvent的主要成员变量,表13.7给出的是ItemEvent类的常用方法见教材例13.52113.6文本组件及相应的事件处理文本组件所触发的事件主要有动作事件ActionEvent和文本变化事件CaretEvent。见教材例13.62213.7窗口组件及窗口事件处理Window类的任何子类都可能触发下列的窗口事件:打开窗口、正在关闭窗口、关闭窗口、激活窗口、变成非活动窗口、最小化窗口和还原窗口。Window类常用方法见教材表13.8窗口事件的监听者是WindowListener接口,具体方法见教材表13.9见教材例13.72313.8对话框设计及相应的事件处理JDialog是Swing中提供的用来实现自定义的对话框,JDialog类也属于顶层容器,其默认的布局管理器为BorderLayout。JDialog有模式和非模式两种方式。通过使用JOptionPane类创建以下四种标准对话框教材中的表13.13给出了创建标准对话框的方法。应用例子见教材例13.13。2413.9按键事件类KeyEvent当用户在键盘上输入字符时便会触发此类事件。表13.14列出了按键事件类KeyEvent的主要方法,表13.15列出了字符的键码值。用按键事件接口KeyListener处理KeyEvent事件必须以类实现KeyListener接口,该接口里声明了3个方法,见教材表13.16。用按键适配器类KeyAdapter处理KeyEvent事件见教材例13.92513.10鼠标事件类MouseEvent用鼠标单击事件源、鼠标指针进入或离开事件

源,或移动、拖动鼠标等操作,均会触发鼠标事件。该类常用方法见教材表13.17处理鼠标事件MouseEvent的监听者是实现MouseListener接口或MouseMotionListener接口:

必须实现教材表13.18中5个用于处理不同鼠标事件的方法。(注意:mousePressed、mouseClicked、和mouseReleased触发顺序。)26主要用于处理多于一个鼠标事件的情况。13.10鼠标事件类MouseEvent监听者也可以是继承MouseAdapter类或MouseMotionAdapter类:

必须实现教材中表13.19两个用于处理鼠标移动与拖动事件的方法。

见P教材中例13.102713.11列表框及相应的事件处理列表框组件JList中显示出多个选项供用户选择,用户可以在列表框中选择一项或多个选项。使列表框具有滚动功能,可以通过创建一个滚动窗格JScrollPane的对象,然后将列表框添加到其中即可。列表框中可选项的序号是从0开始的。JList类的构造方法和常用方法见教材表13.20、13.21。应用见教材13.11。2813.12组合框及相应的处理组合框(combobox)也称为下拉列表框(drop-downlist),单击下拉列表框右边的向下箭头,然后从伸展开的选项框中选择一个选项即可。JComboBox的构造方法及常用方法见教材表13.22和13.23。在组合框中进行选择某个选项的操作时会触发ItemEvent事件,然后即将事件处理的程序代码编写在itemStateChanged()方法中。另外,当组合框处于可编辑状态时,也可以触发ActionEvent事件。应用见教材例13.122913.13菜单设计Java语言菜单分类:窗口菜单、弹出式菜单(快捷菜单)。菜单栏类的继承关系如教材图13.14所示。在菜单程序设计中通常会用到五种菜单对象:JMenuBarJmenuJMenuItemJCheckBoxMenuItemJRadioButtonMenuItem。3013.13菜单设计窗口菜单:窗口菜单是相对于窗口的,它出现在窗口标题栏的下面,总是与窗口同时出现。也不能被布局管理器所控制。3113.13菜单设计窗口菜单:菜单在菜单中除了上面介绍的菜单项外,还有一种带复选框的菜单项,它的前面有一个复选标记:“

”表示选中,“

”表示未选中。这种菜单项的功能是由JCheckBoxMenuItem类所实现的。JCheckBoxMenuItem类的构造方法及常用方法见教材表13.30、13.31。3213.13菜单设计菜单的创建:要创建一个完整的菜单,首先必须分别创建JMenuBar、JMenu和JMenuItem、JCheckBoxMenuItem或JRadioButtonMenuItem对象;然后用add()方法把JMenu对象添加到JMenuBar对象中;再把JMenuItem、JCheckBoxMenuItem或JRadioButtonMenuItem对象添加到JMenu对象中。最后进行事件处理。为相应的菜单项注册对应的事件监听者。3313.13菜单设计菜单的快捷键:快捷键是一个字母,定义好了之后,可以按Ctrl键和该字母键就可以选择菜单中对应的菜单项。为已存在的菜单项定义快捷键。把快捷键Ctrl+O附加到菜单项Open上:Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));3413.13菜单设计弹出式菜单:当在某个组件上单击鼠标右键时,会弹出一个菜单供选择。是一种独立的菜单,它附着在某一组件或容器上。程序运行时,一般情况下不显示,只有当用户在附着有弹出式菜单的组件上进行某项操作时才显示,Java语言用JPopupMenu类实现弹出式菜单的功能。JPopupMenu类的构造方法及常用方法见教材表13.32、13.33.3513.14工具栏设计Swing提供了JToolBar类用于存放工具栏组件的容器。由于工具栏中添加的多为命令按钮,所以,其事件处理也是动作事件ActionEventJToolBar类的构造方法及常用方法见教材表13.34、13.35。应用见教材例13.153613.15滑动条设计及

相应的事件处理滑动条允许用户在一个有限的取

温馨提示

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

评论

0/150

提交评论