Java程序设计资料:单元15 swing事件处理.doc
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java程序设计资料:单元15 swing事件处理.doc》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序设计资料:单元15 swing事件处理 Java 程序设计 资料 单元 15 swing 事件 处理
- 资源描述:
-
1、单元单元 15swing 事件处理事件处理单元目标 理解 Java 委托事件处理机制; 了解常用的事件类、处理事件的接口及接口中的方法; 掌握编写事件处理程序的基本方法;熟练掌握对按钮的 ActionEvent 动作事件的处理。学习任务1.任务描述实现计算器的计算功能。在上个任务的基础上,添加用户操作响应代码即事件处理代码,完成计算功能。2.运行结果知识准备15.1 Java 事件事件是 EventObject 子类的对象,描述在某个时间,某个对象上,发生了某件事情。通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。如:按计算器事件处理计算器事件处理下一个按钮、通过键盘输入一个字符、选
2、择列表框中的一项、点击一下鼠标等。事件不局限于界面操作,比如网络连接或断开等都可看作是事件。事件源是生成事件对象的对象,用事件对象来描述自身状态的改变,即在某时刻,其上发生了什么事情。可以通过回调规定接口对象,将事件发送给其他对象,以使其他对象对事件作出反应成为可能。 监听器是对某类事件感兴趣, 并希望做出响应的对象,必须实现规定接口,此类接口称为监听器接口。事件处理的关键步骤:1.实现监听器接口,定义监听器类,在接口规定方法内实现事件处理逻辑;2.创建监听器对象,将监听器添加到事件源;3.出发事件,事件源回调监听器中相关方法。例如,当用户用鼠标点击一个按钮 jb(JButton 的对象)时,
3、就会产生一个ActionEvent 事件,此时按钮 jb 就是事件源。如果要在计算器窗口类中响应按钮点击事件,计算器窗口就是监听器。为了能够作为 ActionEvent 事件的监听器,Calculator类 要 实 现 接 口ActionListener , 添 加publicvoidactionPerformed(ActionEvent e) 方法, 并在该方法中编写按钮点击后要执行的代码。接口 ActionListener 定义如下:Interface ActionListenervoid actionPerformed(ActionEvent e);然后将监听器添加到事件源 jb.add
4、ActionListener(this),这里 this 代表的是 Calculator 类的当前对象,就是计算器窗口对象。ActionEvent 的主要方法:String getActionCommand(); 获取事件的命令字符串,对按钮而言,该方法返回按钮上显示的文字。通过 getActionCommand 返回结果可以知道用户点击了哪一个按钮。public Object getSource(); 该方法获取事件源对象引用。 如果界面中有多个按钮, 通过将 getSource 结果和每一个按钮对象引用比较, 可以知道用户点击了哪一个按钮引发的本次事件。15.2 Java 事件处理机制要理
5、解事件处理机制, 必须学会站在组件开发者和组件使用者这两个不同的角度来思考问题。事件处理机制的任务是当组件发生某种事件时,要设法通知组件使用者,并允许组件使用者做出个性化的处理。定义组件的目的就是在组件设计完成后到处可以重复使用此组件。因此,组件设计在前,组件使用在后。在定义组件类时,我们并不知道将来谁要使用此组件,从而也就无法确定谁要接收并处理此组件产生的事件。现在的任务就是要找一种办法,将事件消息正确的传递给将来的不确定的组件使用者。如图 4-11 所示:图 4-11 事件处理示意图事件处理机制需要考虑的问题,有以下三个方面:1要接收消息的对象:消息的接收者在使用组件时,先向该组件进行注册
6、。为此,组件应实现注册方法。比如 JTextField 类的 addActionListener()方法。2. 消息传递方法:向消息接收对象传递消息最根本的方法就是调用消息接收对象的一个方法,并通过方法参数将事件相关数据传递给消息接收对象。而不管消息接收对象是何种类型,组件调用的方法必须是一致的,因为组件无法针对每一个消息接收对象进行特殊的方法调用。对组件来说,最好所有消息接收对象看起来都是一样的,都是同一种类型,都支持相同的方法。那么现在的问题就变成: 如何保证所有消息接收对象都都是同一种类型而又能进行各自不同的事件处理呢?如何约束消息接收者的行为?要保证所有消息接收对象都是同一种类型,一种
7、方法就是定义一个类,要求所有消息接收对象都由此类的子类创建,这不是一个好办法,因为这限制了消息接收对象的继承层次。更好的解决方案是使用接口。即将事件处理方法,也就是组件向消息接收对象传递消息要调用的方法,定义在一个接口里。 然后强制注册对象必须实现此接口。 事先规定对象方法的形式,而不关心其具体实现,这正是接口的优势所在。这种方法,不管注册对象是从哪个类派生的,从而保证了消息接收对象类层次定义的自由。3. 传递数据的方法:一种方法是直接通过传递方法的参数。另一种方法,也是现在 Java 采用的面向对象的方法定义一个类来描述事件,当具体事件产生时,则创建一个此事件类的对象,将该对象作为参数进行传
8、递。以上事件处理机制实际上采用了一种应用非常普遍的接口回调思想。 其基本过程是:规定回调接口;实现回调接口;回调接口对象注册;接口回调。定义回调接口的对象,往往是要提供某种服务,但接受服务的对象又不能事先确定。而要实现这种服务,服务对象又必须调用客户对象的方法。一旦遇到这种情况,就可使用接口回调。接口回调的应用不局限于事件处理。比如,网络通讯中就经常使用。现实生活中这样的例子也有很多,比如企业要先注册,然后实现一些标准接口如账目,然后工商税务就可对其进行税收管理等。15.3 Java 事件体系结构Java 事件体系结构如图 4-12 所示,所有事件共同的父类是 EventObject。Java
9、 把事件类大致分为两种:语义事件(semantic events)与底层事件(low-levelevents)。语义事件直接继承自 AWTEvent,如 ActionEvent、AdjustmentEvent与 ComponentEvent 等。底层事件则是继承 自 ComponentEvent 类,如ContainerEvent、FocusEvent、WindowEvent 与 KeyEvent 等。Java 事件类的说明详见表 4-5。图 4-12 事件类体系图表 4-5 Java 事件类的相关说明事件类事件类说明说明事件源事件源ActionEvent通常按下按钮, 双击列表项或选中一个菜
10、单项时,就会生成此事件。Button、List、MenuItem、TextFieldAdjustmentEvent操纵滚动条时会生成此事件。ScrollbarComponentEvent当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。ComponentItemEvent单击复选框或列表项时, 或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent组件获得或失去键盘焦点时会生成此事件。 ComponentKeyEvent接收到键盘输入时会生成此事件。ComponentMouseEvent拖
11、动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。ComponentContainerEvent将组件添加至容器或从中删除时会生成此事件。ContainerTextEvent在文本区或文本域的文本改变时会生成此事件 。TextField、TextAreaWindowEvent当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。Window15.4 Java 事件监听器和监听方法j java.awt.event 包中还定义了 11 个监听者接口,如表 4-6 所示,每个接口内部包含了若干处理相关事件的抽象方法。一般说来,每个事件类都有一个监听者接口与之相对
12、应, 而事件类中的每个具体事件类型都有一个具体的抽象方法与之相对应,当具体事件发生时,这个事件将被封装成一个事件类的对象作为实际参数传递给与之对应的具体方法,由这个具体方法负责响应并处理发生的事件。例如 ActionListener,这个接口定义了抽象方法:public voidactionPerformed(ActionEvent e)。 凡是要处理 ActionEvent 事件的类都必须实现ActionListener 接口,并重写相应的 actionPerformed()方法表 4-6 Java 事件监听器和监听方法事件监听器事件监听器方法方法ActionListeneractionPe
13、rformedAdjustmentListeneradjustmentValueChangedComponentListenercomponentResized、componentMoved、componentShown、componentHiddenContainerListenercomponentAdded、componentRemovedFocusListenerfocusLost、focusGainedItemListeneritemStateChangedKeyListenerkeyPressed、keyReleased、keyTypedMouseListenermouseClic
14、ked 、 mouseEntered 、 mouseExited 、mousePressed、mouseReleasedMouseMotionListenermouseDragged、mouseMovedTextListenertextChangedWindowListenerwindowActivated、windowDeactivated、windowClosed、windowClosingwindowIconified、 windowDeiconified、 windowOpened15.4.1 焦点事件焦点事件 FocusEvent。任何 GUI 对象的获得或失去焦点都被视为焦点事件,
15、 并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。焦点监听器需要实现两个 方法:focusGained 和 focusLost。对组件输入数据要进行错误检查或范围校验时, 对焦点的捕捉就显得尤其重要。其特有方法如下:Component getOppositeComponent() 返回焦点变化事件中的另一组件boolean isTemporary() 说明此事件是临时还是永久的String paramString()获取说明此事件的一字符串15.4.2 窗口事件窗口事件 WindowEvent:当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件。窗口事件 Wi
展开阅读全文