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

下载本文档

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

文档简介

8.5Java的事件处理模型8.5.1Java的事件处理模型概述8.5.2常见事件的处理举例8.5.3事件监听器的挂接和适配器8.5.4GUI类和事件监听类的关系1

8.5.1Java的事件处理模型概述在Java程序的运行过程中,当用户通过程序的用户界面进行某个操作时,便引发一个相应的事件(Event)。Java中的事件,是一个数据对象,用来描述用户所执行的操作。Java定义了很多事件类,分别用于描述不同的用户行为。面向对象的AWT事件处理模型—委托模型:将事件委托给在控件上注册的“事件接收器”接口或“事件适配器”类进行处理。2一、AWT事件处理的基本概念和流程1.事件源。即用户在各种场合进行的各项操作,如敲击键盘或用鼠标点击某个组件等。2.事件对象。对于不同的事件源,Java虚拟机会产生相应类型的事件对象。Java自动识别各种不同的事件对象的类型并进行分类处理。3.事件处理(监听)器接口。各种类型的事件均有对应的事件处理器接口。该接口封装了与其对应类型事件的各种处理方法,并建立了事件到相应处理方法的自动映射。3

8.5.1事件处理模型基于授权事件模型:当事件来源对象S因用户的操作(鼠标或键盘)系统会自动触发此事件类对象E,并通知所授权的事件监听者L(需事先调用来源对象的addXxxListener方法向L注册),事件监听者L中有处理各种事件的方法(事件处理者1~n)便会处理此事件E的各种状况。SEL4事件处理方法实现事件监听器接口法:1)首先给组件注册监听器,使用下列方法:addxxxListener(事件监听器对象);2)确定了事件监听器的类型后,必须在程序中定义类来实现这些接口,重写接口中的所有方法。1)addKeyListener(newCharType());

2)publicclassCharTypeimplementsKeyListener{publicvoidkeyPressed(KeyEvente){……}//大括号中为处理事件的代码publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法体为空publicvoidkeyTyped(KeyEvente){}}

58.5.2常见事件的处理举例窗口事件的处理一、行为事件的处理二、焦点事件的处理三、项目事件的处理四、键盘事件的处理五、鼠标事件的处理六、文本事件的处理6窗口事件的处理产生条件:当一个窗口被激活、撤消激活、打开、关闭、图标化或撤消图标化时窗口事件的表示:1)从WindowEvent类创建的对象表示窗口事件监听类:窗口监听器WindowListener2)表示:由实现了WindowListener接口的对象来表示窗口监听器。3)必须实现的方法:WindowListener接口指定了7种必须实现的方法,分别对应窗口的7种不同事件种类。4)注册一个窗口事件源,需要调用组件的addWindowListener方法。7窗口事件的处理windowOpened当窗口打开时windowClosing单击窗口右上角关闭按钮尝试关闭窗口时windowIconified单击窗口的最小化图标,窗口最小化时执行方法windowDeiconified单击窗口的还原按钮,窗口还原时执行windowActivated当窗口在一系列窗口之前,成为当前窗口时执行,当打开窗口、还原窗口或点击某个窗口到前台都会调用该方法。windowDeactivated当某个窗口从前台移走时,例如图标化、关闭窗口或另外一个窗口被激活等,windowClosed当窗口关闭之后,如单击关闭按钮或执行了窗口的dispose方法后执行8例程8-132)由实现了WindowListener接口的Frame子类对象表示窗口监听器1)从WindowEvent类创建的对象表示窗口事件3)7种必须实现的方法4)注册一个窗口事件源两个小错误9windowClosed方法的代码是否被调用的诀窍注意,若在windowClosing方法中直接调用System.exit方法,将不会调用windowClosed方法,如果不在乎windowClosed方法中的代码,可以这样做。如果想要windowClosed方法被调用,则需要在windowClosing方法中执行窗口的dispose方法,然后从windowClosed方法中调用System.exit方法。如上例示另外,窗口的关闭如果要通过合适的按钮单击来实现时,调用窗口的dispose方法。System.exit方法是结束程序,也能够关闭窗口。窗口事件的处理Window类的dispose()方法:ReleasesallofthenativescreenresourcesusedbythisWindow,itssubcomponents,andallofitsownedchildren10一、行为事件的处理产生条件:按钮被按下、单行文本框中的回车、列表框的某项被双击或一个菜单项被选中行为事件的表示:1)从ActionEvent类生成一个对象监听类:行为监听器ActionListener2)表示:由实现了ActionListener接口的对象表示行为监听器。3)必须实现的方法:acitonPerformed4)注册一个行为事件源:需要调用组件的addActionListener方法。5)撤销一个行为事件源:使用组件的removeActionListener方法11产生行为事件时,用户可以按住Alt、Ctrl、Meta或Shift等四个修改键,以便使同一个按钮实现不同的事情处理。ActionEvent类提供了getModifiers方法返回标识所有按下的修改键的整数值,通过与ActionEvent类成员常量ALT_MASK、CTRL_MASK、META_MASK和SHIFT_MASK进行位与运算,就可以在按钮或菜单项的事件处理程序中根据结果是否非零判别是否按下了修改键。当有多个组件挂接到同一个行为事件监听器上时,可以用全局标识符来标识按下的按钮或选中的菜单项,方法是,在组件创建时,调用组件对象的setActionCommand方法给该组件分配一个标识符,当这个组件的行为事件发生时则通过调用ActionEvent对象的getAcitonCommand方法获取这个标识符。一、行为事件的处理12ac例程8-7效果:鼠标放到三个按钮上的形状分别为指针,十字架和文本注意:Applet的运行方式!需将编译好的类文件嵌入到一个网页中声音文件要放到与网页文件的同一目录下播放相应的声音文件(演示:如何看懂帮助)13二、焦点事件的处理产生条件:当一个组件得到或失去焦点时,发生焦点事件例如用户在对话框中从一个组件移到另外一个组件进行操作时这些组件只有一个能够得到焦点焦点事件的表示:1)由从FocusEvent类创建的对象来表示监听类:焦点监听器FocusListener2)表示:由实现了FocusListener接口的对象表示行为监听器。3)必须实现的方法:两个必须实现的方法,focusGained和focusLost

4)注册一个行为事件源:需要调用组件的addFocusListener方法。14二、焦点事件的处理焦点的改变可以是暂时的也可以是永久的。当一窗口出现在另一个窗口的前面时,这个焦点改变是暂时的。当鼠标单击文本域或使用Tab键切换到另一个组件时,焦点改变是永久的。FocusEvent类的isTemporary方法返回是否为暂时改变。当第一个焦点事件发生时,获取焦点的组件会调用focusGained方法。通常是第一个加入容器的组件能够首先获得焦点。对于接下来的焦点事件,失去焦点的组件调用focusLost,然后获取焦点的组件调用focusGained。15例程8-8如果输入的不是数字,则焦点将被调回到numField168-8运行结果输入“111”,将鼠标移到第二个框输入“aaaaaa”,将鼠标移到第二个框17三、项目事件的处理产生条件:当用户选择一个单选按钮、复选框、复选框菜单项或者选择列表框、下拉列表框(选择列表)中的项目时,焦点事件的表示:1)从ItemEvent类创建的对象表示项目事件监听类:项目监听器ItemListener2)表示:它们由实现了ItemListener接口的对象表示。3)必须实现的方法:ItemListener仅指定了一个必须实现的方法ItemStateChanged。4)注册一个项目事件源:需要调用组件的addItemListener方法。18例程8-919四、键盘事件的处理产生条件:当用户按下或释放一个键时键盘事件的表示:1)从KeyEvent类创建的对象表示键盘事件。监听类:键盘监听器2)表示:它们由实现KeyListener界面的对象代表。3)必须实现的方法:对应三种键盘事件,KeyListener指定了三个必须实现的方法:keyPressed、keyReleased、keyTyped。4)注册一个键盘事件源:调用组件的addKeyListener方法。20例程8-10更正:首个字母小写21五、鼠标事件的处理产生条件:当用户按下鼠标、释放鼠标或移动鼠标指针时鼠标事件的表示:1)从MouseEvent类创建的对象表示鼠标事件。监听类:两个鼠标监听器MouseListener和MouseMotionListener2)表示:鼠标按钮相关事件监听器由实现MouseListener接口的对象表示,而鼠标移动相关事件监听器则由实现MouseMotionListener接口的对象表示3)必须实现的方法:其中。MouseListener指定5个必须实现的方法,他们是MouseClicked、MouseEntered、MouseExited、MousePressed和MouseReleased。MouseMotionListener指定两种必须实现的方法,MouseDragged和MouseMoved。4)注册一个鼠标事件源:调用相应的addMouseListener和addMouseMotionListener方法。22更正:首个字母小写例程8-11加“e.”23六、文本事件的处理产生条件:

当一个文本框或文本域的内容发生改变时,文本事件的表示:1)从TextEvent类产生的对象可以表示文本事件。监听类:文本监听器TextListener2)表示:它们由实现TextListener接口的对象来表示。3)必须实现的方法:TextListener只指定了一个必须实现的方法textValueChanged。4)注册一个文本事件源:必须调用组件的addTextListener方法。24例程8-12两处小错误运行效果:文本框里的字母不能超过8个258.5.3事件监听器的挂接和适配器1.

事件监听器的挂接同一个组件可以加上多个事件监听器,同一个事件监听器也可以在同一组件上添加/删除多次。26例程8-1427运行结果点OK一次点cancel一次281.

适配器很多事件监听器接口中定义了很多抽象方法,我的程序中可能只用到其中的一个或几个,但根据语法规则,实现接口时需要把其中定义的方法都要实现,对程序中不用的方法也需要填进空语句。例子:有象WindowListener接口,有7个方法,而很多程序中可能只用到其中的windowClosing方法,以便写上窗口右上角的关闭按钮的关闭程序功能。这样就使程序编写显得非常麻烦。29为简化程序,Java中预定义了一些特殊类,这些类已经实现了相应的接口,所有方法都写上了空语句。编写事件监听器类时,便可通过继承这些特殊的类来达到实现相应的事件监听器接口的目的,同时又可以只选择程序中需要的方法进行重写,非常方便。Java中将这些预定义的类称为事件适配器类,

温馨提示

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

评论

0/150

提交评论