Java的事件处理模型.ppt_第1页
Java的事件处理模型.ppt_第2页
Java的事件处理模型.ppt_第3页
Java的事件处理模型.ppt_第4页
Java的事件处理模型.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1 8 5Java的事件处理模型 8 5 1Java的事件处理模型概述8 5 2常见事件的处理举例8 5 3事件监听器的挂接和适配器8 5 4GUI类和事件监听类的关系 2 8 5 1Java的事件处理模型概述 在Java程序的运行过程中 当用户通过程序的用户界面进行某个操作时 便引发一个相应的事件 Event Java中的事件 是一个数据对象 用来描述用户所执行的操作 Java定义了很多事件类 分别用于描述不同的用户行为 面向对象的AWT事件处理模型 委托模型 将事件委托给在控件上注册的 事件接收器 接口或 事件适配器 类进行处理 3 一 AWT事件处理的基本概念和流程 1 事件源 即用户在各种场合进行的各项操作 如敲击键盘或用鼠标点击某个组件等 2 事件对象 对于不同的事件源 Java虚拟机会产生相应类型的事件对象 Java自动识别各种不同的事件对象的类型并进行分类处理 3 事件处理 监听 器接口 各种类型的事件均有对应的事件处理器接口 该接口封装了与其对应类型事件的各种处理方法 并建立了事件到相应处理方法的自动映射 4 8 5 1事件处理模型 基于授权事件模型 当事件来源对象S因用户的操作 鼠标或键盘 系统会自动触发此事件类对象E 并通知所授权的事件监听者L 需事先调用来源对象的addXxxListener方法向L注册 事件监听者L中有处理各种事件的方法 事件处理者1 n 便会处理此事件E的各种状况 5 事件处理方法 实现事件监听器接口法 1 首先给组件注册监听器 使用下列方法 addxxxListener 事件监听器对象 2 确定了事件监听器的类型后 必须在程序中定义类来实现这些接口 重写接口中的所有方法 1 addKeyListener newCharType 2 publicclassCharTypeimplementsKeyListener publicvoidkeyPressed KeyEvente 大括号中为处理事件的代码publicvoidkeyReleased KeyEvente 未用到此方法 所以方法体为空publicvoidkeyTyped KeyEvente 6 8 5 2常见事件的处理举例 窗口事件的处理一 行为事件的处理二 焦点事件的处理三 项目事件的处理四 键盘事件的处理五 鼠标事件的处理六 文本事件的处理 7 窗口事件的处理 8 窗口事件的处理 9 例程8 13 10 windowClosed方法的代码是否被调用的诀窍 注意 若在windowClosing方法中直接调用System exit方法 将不会调用windowClosed方法 如果不在乎windowClosed方法中的代码 可以这样做 如果想要windowClosed方法被调用 则需要在windowClosing方法中执行窗口的dispose方法 然后从windowClosed方法中调用System exit方法 如上例示另外 窗口的关闭如果要通过合适的按钮单击来实现时 调用窗口的dispose方法 System exit方法是结束程序 也能够关闭窗口 窗口事件的处理 Window类的dispose 方法 ReleasesallofthenativescreenresourcesusedbythisWindow itssubcomponents andallofitsownedchildren 11 一 行为事件的处理 12 产生行为事件时 用户可以按住Alt Ctrl Meta或Shift等四个修改键 以便使同一个按钮实现不同的事情处理 ActionEvent类提供了getModifiers方法返回标识所有按下的修改键的整数值 通过与ActionEvent类成员常量ALT MASK CTRL MASK META MASK和SHIFT MASK进行位与运算 就可以在按钮或菜单项的事件处理程序中根据结果是否非零判别是否按下了修改键 当有多个组件挂接到同一个行为事件监听器上时 可以用全局标识符来标识按下的按钮或选中的菜单项 方法是 在组件创建时 调用组件对象的setActionCommand方法给该组件分配一个标识符 当这个组件的行为事件发生时则通过调用ActionEvent对象的getAcitonCommand方法获取这个标识符 一 行为事件的处理 13 ac 例程8 7 效果 鼠标放到三个按钮上的形状分别为指针 十字架和文本 注意 Applet的运行方式 需将编译好的类文件嵌入到一个网页中声音文件要放到与网页文件的同一目录下 播放相应的声音文件 演示 如何看懂帮助 14 二 焦点事件的处理 15 二 焦点事件的处理 焦点的改变可以是暂时的也可以是永久的 当一窗口出现在另一个窗口的前面时 这个焦点改变是暂时的 当鼠标单击文本域或使用Tab键切换到另一个组件时 焦点改变是永久的 FocusEvent类的isTemporary方法返回是否为暂时改变 当第一个焦点事件发生时 获取焦点的组件会调用focusGained方法 通常是第一个加入容器的组件能够首先获得焦点 对于接下来的焦点事件 失去焦点的组件调用focusLost 然后获取焦点的组件调用focusGained 16 例程8 8 如果输入的不是数字 则焦点将被调回到numField 17 8 8运行结果 输入 111 将鼠标移到第二个框 输入 aaaaaa 将鼠标移到第二个框 18 三 项目事件的处理 19 例程8 9 20 四 键盘事件的处理 21 例程8 10 22 五 鼠标事件的处理 23 例程8 11 24 六 文本事件的处理 25 例程8 12 运行效果 文本框里的字母不能超过8个 26 8 5 3事件监听器的挂接和适配器 1 事件监听器的挂接同一个组件可以加上多个事件监听器 同一个事件监听器也可以在同一组件上添加 删除多次 27 例程8 14 28 运行结果 点OK一次 点cancel一次 29 1 适配器 很多事件监听器接口中定义了很多抽象方法 我的程序中可能只用到其中的一个或几个 但根据语法规则 实现接口时需要把其中定义的方法都要实现 对程序中不用的方法也需要填进空语句 例子 有象WindowListener接口 有7个方法 而很多程序中可能只用到其中的windowClosing方法 以便写上窗口右上角的关闭按钮的关闭程序功能 这样就使程序编写显得非常麻烦 30 为简化程序 Java中预定义了一些特殊类 这些类已经实现了相应的接口 所有方法都写上了空语句 编写事件监听器类时 便可通过继承这些特殊的类来达到实现相应的事件监听器接口的目的 同时又可以只选择程序中需要的方法进行重写 非常方便 Java中将这些预定义的类称为事件适配器类 类似于监听器接口 为方便使用 这些类的名称有一定的规则 只要将相应接口名称中的Listener改为Adapter即是该监听器接口对应的适配器类 如WindowListener对应的适配器类为WindowAdapter MouseListener对应的适配器类为MouseAdapter 有一些接口如AcitonListener 本身只有一个方法需要实现 JDK中就没有定义该接口的Adapter 1 适配器 31 例程8 15 32 8 5 4GUI类和事件监听类的关系 除了例8 14以外 前面的例子都是直接将提供界面的类同时作为事件监听器类 在复杂程序中经常是将GUI显示的类和事件处理类分离在两个类中 这样有利于界面和业务逻辑的分离 提高了代码的灵活性和可重用性 然而 将事件处理器和图形界面放在两个类中时 又使得两个类之间的数据交流变得复杂 因此 经常将事件处理

温馨提示

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

评论

0/150

提交评论