




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十三讲 AWT事件模型 2 目标 掌握基本事件处理掌握适配器类的使用使用多个监听器 3 事件 如果用户在用户界面执行了一个动作 这将导致一个事件的发生 事件是描述发生了什么的对象 4 事件处理模型 在常见的事件处理模型中 对象通常划分为3种 事件对象 事件制造者对象和事件接收者对象 一般而言 某一个对象是事件的制造者 其余对象是事件的接收者 而事件对象本身则封装了有关事件的信息 当事件制造者的内部状态发生变化时 会根据需要创建一个代表其状态发生变化的事件对象 并将它传给所有向它登记过的事件接收者对象 5 委派事件模型DEM 在Java1 1版中 事件处理机制被称为DEM DelegationEventModel 委派事件模型在DEM中 有3种对象 事件源对象 事件对象和事件监听器对象DEM的工作原理 一个事件源是一个能够注册监听器对象并向它们发送事件对象的对象一个监听器对象是一个实现了专门的监听器接口的类的实例 它使用事件对象中的信息来决定对事件的反应 事件发生时 事件源会把事件对象发送给所有的注册监听器 6 事件源对象 事件源拥有注册或删除事件监听器的方法 我们通过这些方法向其注册或者删除事件监听器注册事件监听器的addXXXListener 方法 eg addMouseListener 删除事件监听器的removeXXXListener 方法 eg removeMouseListener 7 事件对象2 1 在DEM中 每一种事件都有一个事件对象与之对应 而所有的AWT中的事件对象都是从java util EventObject继承而来的 每一种具体的事件对象都有一些额外的功能 在AWT库中 事件类EventObject只有一个直接的子类AWTEvent 而后者是所有的AWT事件类的起源 8 AWT事件类等级结构图 9 事件对象2 2 事件对象封装了事件信息 这些信息是事件源对象与监听器对象所需要的 有一些事件类 如PaintEvent 是不会传递给监听器的 因此对Java程序员来说没什么用处 Java程序只考虑那些会被传递给监听器的事件类 这些事件类的名称如下 10个 ActionEventAdjustmentEventCompenontEventContainerEventFocusEventItemEventKeyEventMouseEventTextEventWindowEvent 10 AWT事件类2 1 11 AWT事件类2 2 12 事件监听器对象2 1 事件监听器对象是当事件发生时被调用的对象 监听器对象根据事件对象内封装的信息 决定如何响应这个事件 一个对象要成为事件监听器对象 必须实现事件监听器接口Swing仍然广泛使用AWT所提供的各种事件接口进行事件处理 13 事件监听器对象2 2 在AWT中所给出的事件监听器接口中 有以下接口声明了多于一个的方法 它们分别是 8个 CompnentListenerContainerListenerFocusListenerKeyListenerMouseListenerMouseMotionListenerWindowListenerHierarchyBoundsListenerAWT为这些接口提供了相应的适配器类 这些适配器类叫做事件监听适配器类 由于其它的几个接口仅仅声明了一个方法 因此无适配器类 14 事件监听器接口列表2 1 15 事件监听器接口列表2 2 16 事件监听适配器 这些适配器类 8个 为它们所实现的接口提供空的实现 这样一来 一个需要处理某个事件的应用类只需要继承相应的事件适配器类 并覆盖感兴趣的事件处理方法即可 17 处理按钮单击事件 publicclassMyEventTestextendsPanel ButtonmyButton newButton 蓝色 创建面板或其他GUI组件MyListenermyAction newMyListener MyButton addActionListener myAction privateclassMyListenerimplementsActionListener publicMyListener 初始化 publicvoidactionPerformed ActionEventevent 需要为事件进行的操作 实现了ActionListener接口的监听器 实现了actionPerformed方法 以便根据参数ActionEvent对象的信息对事件做出响应 为按钮事件注册监听器 18 捕获窗口事件3 1 JFrame对象是窗口事件 WindowEvent 的事件源 我们要指定一个监听器对象 MyWindowListenerlistener frame addWindowListener listener 监听器对象要实现WindowListener接口 WindowListener接口中共有七个方法 它们分别对应七个窗口事件 publicinterfaceWindowListener voidwindowOpened WindowEvente voidwindowClosing WindowEvente voidwindowClosed WindowEvente voidwindowIconified WindowEvente voidwindowDeiconified WindowEvente voidwindowActivated WindowEvente voidwindowDeactivated WindowEvente 19 捕获窗口事件3 2 WindowListener接口实现方法一 定义一个类来实现WindowListener接口 在感兴趣的方法中添加我们需要的代码 然后让其他方法为空即可 classQuitWindowimplementsWindowListener publicvoidwindowClosing WindowEvente System exit 0 voidwindowOpened WindowEvente voidwindowClosed WindowEvente voidwindowIconified WindowEvente voidwindowDeiconified WindowEvente voidwindowActivated WindowEvente voidwindowDeactivated WindowEvente 20 捕获窗口事件3 3 WindowListener接口实现方法二 Java为每个具有多个方法的AWT监听器接口提供了一个适配器类 适配器类实现了监听器接口的所有方法 但是却不做任何实际工作 与WindowListener接口对应的WindowAdapter类实现了以上七个空方法 我们只需要通过扩展适配器类来实现我们感兴趣的方法 classQuitWindowextendsWindowAdapter publicvoidwindowClosing WindowEvente System exit 0 21 捕获窗口事件示例 捕获窗口的关闭事件 程序代码见WindowClosing java 当点击窗口的关闭图标时 窗口被关闭 22 焦点事件 如果某个组件能够接收用户按键 那么该组件就拥有焦点 拥有焦点的组件在显示形式上与其他组件有一些差别 文本域内会显示光标 按钮四周会显示一个由虚线组成的矩形框 可以捕获丢失的焦点事件来进行输入的合法性检查 如果输入不合法 通过调用requestFocus方法把焦点重新移回到该文本域 提示用户重新输入 publicvoidfocusLost FocusEventevent passText为需要进行合法性检查的文本域if event getComponent passText 23 键盘事件 KeyListener接口中有三个方法 publicvoidkeyPressed KeyEvente publicvoidkeyReleased KeyEvente publicvoidkeyTyped KeyEvente Java对于用户按键的处理过程 当前键盘状态为小写状态 要输入一个大写字母 A 我们的操作过程为 先按住Shift键不放 再按下A键 然后松开 整个过程Java会产生五个事件 按下Shift键 为VK SHIFT调用keyPressed方法 按下A键 为VK A调用keyPressed方法 键入字符 A 为字符 A 调用keyTyped方法 松开A键 为VK A调用keyReleased方法 松开Shift键 为VK SHIFT调用keyReleased方法 24 鼠标事件 MouseListener接口 mousePressed 鼠标键被按下时调用 mouseReleased 鼠标键被释放时调用 mouseClicked 合并上述两个事件为一次鼠标点击事件 这三个方法的参数是MouseEvent 通过getX和getY方法 能够得到鼠标点击时的鼠标指针的x和y坐标 通过getClickCount方法 可以区别是单击操作 还是双击操作 MouseMotionListener接口 mouseMoved 鼠标移动 mouseDragged 用户拖动鼠标 鼠标指针形状的设置 setCursor Cursor getPredefinedCursor Cursor HAND CURSOR 25 使用多个监听器示例 创建一个带有两个按钮的窗口 每个按钮都有自己的监听器 点击一次 新建 按钮时 就创建一个新的窗口 点击 关闭全部
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐产业版权运营与音乐版权保护法律政策分析报告
- 新能源产业绿色信贷政策执行成效2025年总结与优化建议报告
- 2023七年级数学下册 第五章 相交线与平行线5.1 相交线5.1.1 相交线说课稿 (新版)新人教版
- 2025年中国高纯钽行业市场分析及投资价值评估前景预测报告
- 2025年中国钢化玻璃潜水面镜行业市场分析及投资价值评估前景预测报告
- 第9课 体验在线应用(教案)三年级上册信息技术浙教版
- 口腔医院常规知识培训总结课件
- 新教材高中政治 9.1 矛盾是事物发展的源泉和动力说课稿1 新人教版必修4
- 16.2人体对外界信息的感知(第一课时)说课稿-2024-2025学年苏科版生物八年级上册
- 高级翻译考试题库及答案
- 教育创新战略华润如何打造未来领袖孵化器
- 2025年四川省高考化学试卷真题(含答案解析)
- 供应链管理师三级实操考试题库及答案
- 经典酶基因变异功能-洞察及研究
- 中国艺术歌曲课件
- 抖音基础入门教程课件
- 药食同源产品标准通则
- 学堂在线 科研伦理与学术规范 期末考试答案
- 中枢性抗胆碱药苯海索
- 冠心病中西医结合治疗的现状与进展
- 父母出资写协议书
评论
0/150
提交评论