14、AWT事件模型.ppt_第1页
14、AWT事件模型.ppt_第2页
14、AWT事件模型.ppt_第3页
14、AWT事件模型.ppt_第4页
14、AWT事件模型.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、第13讲,AWT事件模型,第2讲,目标,理解委托事件模型DEM,掌握DEM的工作原理,掌握基本的事件处理,掌握适配器类的使用,使用多个监听器,第3讲,事件,如果用户在用户界面中执行一个动作,这将导致一个事件。事件是描述发生了什么的对象。4、事件处理模型,软件系统中的事件处理允许两个或多个对象根据它们的状态变化进行通信和协调。在常见的事件处理模型中,对象通常分为三种类型:事件对象、事件生产者对象和事件接收者对象。一般来说,一个对象是事件的生产者,其他对象是事件的接收者。事件对象本身封装了关于事件的信息。当事件发生器的内部状态改变时,将根据需要创建一个表示其状态改变的事件对象,并将它发送给向其注册

2、的所有事件接收器对象。5,委托事件模型DEM,在Java1.1版本1.1中,事件处理机制称为DEM(委托事件模型)-委托事件模型在DEM中,有三种对象:事件源对象、事件对象和事件侦听器对象。数字高程模型是如何工作的:事件源是一个可以注册侦听器对象并向它们发送事件对象的对象。侦听器对象是实现特殊侦听器接口的类的实例,该接口使用事件对象。当事件发生时,事件源会将事件对象发送给所有注册的侦听器。6.事件源对象,一个类不需要实现任何接口或继承任何类就可以成为事件源,但是事件源需要保留一个事件侦听器列表。事件源具有注册或删除事件侦听器的方法。使用这些方法,我们注册或删除事件侦听器。事件侦听器的addXX

3、XListener()方法: addcomponent listener()addfocuslistener()addinputmetholistener()addkey listener()已注册。addmouselistener()addmousemotionlistener()addpropertychangelinter()删除事件侦听器:的removeXXXListener()方法remove componentslistener()removeaddFocusListener()removeinputmethodslistener()removekeyllistener()remo

4、veMouseMotionListener()(removepropertychangelitener),7,事件对象2-1。在DEM中,每个事件都有一个与之对应的事件对象,AWT中的所有事件对象都是从java.util.EventObject继承而来的,每个特定的事件对象都有一些额外的功能。在AWT库中,事件类EventObject只有一个直接子类AWTEvent,后者是所有AWT事件类的起源。Swing组件引入了更多的事件类,这些类直接从EventObject派生而来。8,AWT事件类层次结构图,9,事件对象2-2,事件对象封装事件信息,这是事件源对象和侦听器对象所需要的。有些事件类,如画

5、图事件,没有传递给侦听器,所以它们对Java程序员来说是无用的。Java程序只考虑将被传递给侦听器的事件类,这些事件类的名称如下(10): actionevent调整事件compentevent容器事件焦点事件项事件键事件鼠标事件文本事件窗口事件,10,AWT事件类2-1,11,AWT事件类2-2,12和事件侦听器对象2-1,它们在事件发生时被调用,根据事件对象中封装的信息决定如何响应此事件。要成为事件侦听器对象,对象必须实现事件侦听器接口。AWT库中的所有事件侦听器接口都是java.util.EventListener接口的子接口。尽管Swing组件引入了许多事件侦听器接口,但是AWT提供的

6、各种事件接口仍然广泛用于事件处理。在AWT中给出的事件侦听器接口中,以下接口声明了多个方法。它们是(8):compentlistener容器侦听器焦点侦听器键侦听器鼠标侦听器鼠标移动侦听器窗口侦听器层次结构boundslistener awt为这些接口提供相应的适配器类,称为事件侦听适配器类。因为其他几个接口只声明一个方法,所以没有适配器类,14,事件侦听器接口列表2-1,15,事件侦听器接口列表2-2,16,以及事件侦听器适配器。这些适配器类(8)为它们实现的接口提供了空的实现。这样,需要处理事件的应用程序类只需要继承相应的事件适配器类,并覆盖感兴趣的事件处理方法。17.处理按钮点击事件,公

7、共类我的事件测试扩展面板按钮我的按钮=新按钮(蓝色);/创建面板或其他图形用户界面组件我的列表我的操作=新建我的列表();my Button . AddActionListener(my Action);私有类我的侦听器实现操作侦听器公共我的侦听器()./初始化已执行的公共无效操作(操作事件事件)./为事件、实现ActionListener接口的侦听器和actionPerformed方法执行的操作,以便根据ActionEvent对象的参数信息响应事件,并为按钮事件注册侦听器。18.单击按钮示例,并使用内部类ButtonAction作为事件侦听器。面板中有两个按钮,当用户单击其中一个按钮时,面板

8、中会显示相应的操作。例如,如果您单击“按钮一”,将显示“您单击了:按钮一”。有关程序代码,请参见ButtonClick.java。运行结果如下:19。捕获窗口事件3-1。JFrame对象是窗口事件的事件源。我们需要指定一个侦听器对象:我的窗口侦听器侦听器=.框架。添加窗口侦听器(侦听器);侦听器对象实现了窗口侦听器接口。WindowListener接口中有七种方法,对应于七个窗口事件:公共接口窗口监听器无效窗口打开(窗口事件e);void Window closing(WindowEvent e);void WindowClosed(WindowEvent e);void Windowicon

9、ified(WindowEvent e);void WindowDefinited(WindowEvent e);void Window activated(WindowEvent e);void WindowDectived(WindowEvent e);20,捕获窗口事件3-2,WindowListener接口实现方法1:定义一个类来实现WindowListener接口,在感兴趣的方法中添加我们需要的代码,然后将其他方法留空。类退出窗口实现窗口侦听器公共无效窗口关闭(窗口事件e)系统.退出(0);无效窗口打开(窗口事件E)无效窗口关闭(窗口事件E)无效窗口图标化(窗口事件E)无效窗口指定(

10、窗口事件E)无效窗口激活(窗口事件E)无效窗口停用(窗口事件E),21,捕获窗口事件3-3,窗口侦听器接口实现方法2: Java为每个AWT侦听器接口提供一个适配器类,有多种方法。适配器类实现侦听器接口的所有方法,但不做任何实际工作。对应于WindowListener接口的WindowAdapter类实现了上述七个空方法,我们只需要扩展适配器类来实现我们感兴趣的方法。类退出窗口扩展窗口适配器公共无效窗口关闭(窗口事件e)系统.退出(0);22,捕捉窗口事件示例,捕捉窗口关闭事件。程序代码见WindowClosing.java。当您单击窗口的关闭图标时,窗口将关闭。23,语义事件和底层事件(1)

11、,AWT将事件分为两类:语义事件和低层事件。语义事件表达了用户的行为。例如,用鼠标点击一个按钮是一个语义事件。因此,动作事件是语义事件,而底部事件是构成各种语义事件的简单事件。例如,鼠标点击事件由鼠标按钮按下事件和鼠标按钮释放事件组成。类似地,调整滚动条是语义事件,而拖动鼠标是底部事件,24。语义事件和底层事件(2)。下面是AWT中四个最重要的语义事件类:动作事件:相应的按钮点击、菜单选择、列表框选择、在文本框中按回车键等。调整事件:用户调整滚动条。ItemEvent:用户从一组选择框或列表项中进行选择。文本事件:文本字段或文本框中的内容发生变化。下面是六个底层事件类:组件事件:组件大小改变、

12、移动、显示或隐藏。按键事件:键盘上的一个键被按下或释放。鼠标事件:鼠标按钮被按下,释放,鼠标移动或拖动。焦点事件:组件获得焦点或失去焦点。WindowEvent:窗口被激活、屏蔽、最小化、最大化或关闭。容器事件:添加或删除组件。25,焦点事件,如果一个组件可以接收用户键,那么该组件就有焦点。有焦点的组件与显示形式中的其他组件有一些区别:光标将显示在文本字段中;按钮周围显示一个带虚线的矩形框。可以捕获焦点丢失事件来检查输入的有效性。如果输入非法,调用requestFocus方法将焦点移回文本字段,提示用户重新输入:public void focus lost(焦点事件)/passtext是文本字

13、段If(事件)。getcomponent ()=passtext,需要检查其合法性。26、键盘事件,在KeyListener界面有三种方法:按下公共无效键(keyevent e)公共无效键释放(keyevent e)公共无效键键入(keyevent e) Java的用户键处理程序:当前键盘状态为小写,要输入大写字母“a”,我们的操作程序是:先按住Shift键,然后按下a键,再释放它。在整个过程中,Java将生成五个事件:按下Shift键:调用VK_SHIFT的按键方法;按键:调用VK_A的按键方法;键入字符“a”:调用字符“a”的keyTyped方法;松开键甲:调用VK _甲的键释放方法;松开

14、Shift键:调用VK_SHIFT的键释放方法。27,捕捉键盘事件的示例。每当用户按下键盘上的一个键,程序就捕捉键盘输入并在面板上显示,包括虚拟键码、键名和字符。例如,当前键盘状态为小写,当用户按下“A”键时,显示的值依次为65、A和A。有关程序代码,请参见KeyPress.java。运行结果如下:28,鼠标事件,鼠标监听器接口:鼠标按下:当鼠标按钮被按下时调用;鼠标释放:当鼠标按钮被释放时调用;鼠标点击:将以上两个事件合并成一个鼠标点击事件。这三个方法的参数是MouseEvent。通过getX和getY方法,可以在鼠标点击时获得鼠标指针的x和y坐标。通过getClickCount方法,您可以

15、区分单击操作和双击操作。鼠标移动监听器接口:鼠标移动:鼠标移动;鼠标拖动:用户拖动鼠标。鼠标指针形状的设置:设置光标(cursor . getpredefinetedcursor(cursor . hand _ cursor);29,捕捉鼠标事件示例,捕捉鼠标移动和点击事件。在窗口中显示按钮。当鼠标移动到窗口中时,窗口的背景变成红色;当按钮被点击时,窗口的背景变成蓝色。有关程序代码,请参见MyMouseDemo.java。运行结果如下:30。使用多个监听器示例,创建一个带有两个按钮的窗口,每个按钮都有自己的监听器。单击“新建”按钮一次,您将创建一个新窗口。当您单击“全部关闭”按钮时,所有创建的窗口都将关闭。程序代码见MyMultic

温馨提示

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

评论

0/150

提交评论