JAVA学习--第10章GUI事件处理.ppt_第1页
JAVA学习--第10章GUI事件处理.ppt_第2页
JAVA学习--第10章GUI事件处理.ppt_第3页
JAVA学习--第10章GUI事件处理.ppt_第4页
JAVA学习--第10章GUI事件处理.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

江苏大学计算机学院 Version 2.0 第10章 GUI事件处理 1 江苏大学软件工程课程组 定义事件和事件处理 从事件对象的详细信息确定源于事件的用户操作 为各种事件类型确定相应的侦听器接口 为各种事件类型创建相应的事件处理器方法 了解内部类的使用以及事件处理中的匿名类 确定关键的 AWT 组件以及它们触发的事件 描述如何创建菜单、菜单栏、菜单项以及如何控制视觉 外观 内容 2 江苏大学软件工程课程组 事件处理机制 事件:是一种描述发生情况的对象 事件源:能够产生事件的对象都可以成为事件源,如文本框、按钮、下 拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象。 监视器:需要一个对象对事件源进行监视,以便对发生的事件作出处理。 事件源通过调用相应的方法将某个对象作为自己的监视器。 事件处理器:是一个方法,它接收事件对象、对其进行解码并处理用 户的交互。 3 江苏大学软件工程课程组 事件委托模型 事件源对象 实现了某种监听器 接口的类的对象注册 当某种事件发生 向监听器传送某种事件对象 (封装了某种事件的信息) 接到事件对象后 进行某种处理 TestActionEvent.java 委托事件模型实现步骤: 1 确定事件源(GUI组件) 2 确定监听者 3 注册事件 4 建立事件源和监听者的联系 4 江苏大学软件工程课程组 事件的委托模型 事件可以发送到许多事件处理器。 事件处理器对组件产生的事件感兴趣时,就注册该组件 。 TestActionEvent2.java 5 江苏大学软件工程课程组 事件的委托模型(续) Client 对象(处理器)注册一个它们要观察的 GUI 组件 GUI 组件仅触发已经发生的事件类型的处理器。 大多数组件可以触发多种事件类型。 委托模型在多个类之间分派工作。 6 江苏大学软件工程课程组 事件种类 GUI 事件的类层次结构: 7 江苏大学软件工程课程组 侦听器类型 一些事件及其关联的事件侦听器是: 事件操作侦侦听器类类型 用户单击 一个按钮,在文本字段中 输入后或选择一个菜单项后按 Enter 键 ActionListene r 用户关闭一个框架(主窗口) WindowListene r 光标移过组件时用户按鼠标键MouseListener 用户将鼠标移向组件 MouseMotionLi stener 组件变成可见了 ComponentList ener 组件获取键盘输 入FocusListener 8 江苏大学软件工程课程组 侦听器 ActionListener 接口: 只有一个方法,即 actionPerformed(ActionEvent) 要检测何时用户单击 屏幕上的按钮(或键盘),程序必须 具有执行 ActionListener 接口的对象。 该程序必须使用addActionListener()方法,将该对象注册 为该按钮(事件源)的操作侦听器。 当用户单击 屏幕上的按钮时,该按钮触发一个操作事件。 9 江苏大学软件工程课程组 侦听器(续) MouseListener 接口: 要检测鼠标单击 操作,程序必须具有一个执行 MouseListener 接口的对象。 该接口包括几个事件: mouseEntered、mouseExited、 mousePressed、mouseReleased 和 mouseClicked。 当用户单击 屏幕上的按钮时,该按钮触发一个操作事件 。 10 江苏大学软件工程课程组 侦听器(续) 执行多个接口: 使用逗号可以将一个类与多个接口一起声明: Implements MouseListener,MouseMotionListener 侦听多个源: 多个源引起不相关的程序部分对同一个事件发生反应。 当事件发生时,调用所有已注册过的侦听器的处理器。 11 江苏大学软件工程课程组 TextField 类 java.awt.TextField类用来创建文本框对象。 TextField 有如下常用方法: TextField() TextField(int columns) TextField(String text) TextField(String text, int columns) public void setText(String t) public String getText() public void setEditable(boolean b) public boolean isEditable() public void setBackground(Color c) public void select(int selectionStart,int selectionEnd) public void selectAll() public void addActionListener(ActionListener l) 添加动作监听器。 12 江苏大学软件工程课程组 TextField事件监听 TextField 对象可能发生Action(光标在文本框内敲回车)事件。与该 事件对应的事件类是java.awt.event.ActionEvent。 用来处理 ActionEvent事件是实现了java.awt.event. ActionListener 接口的类的对象。ActionListener接口定义有方法: public void actionPerformed(ActionEvent e) 实现该接口的类要在该方法中添加处理该事件(Action)的语句。 使用 addActionListener(ActionListener l)方法为TextField 对象注 册一个ActionListener对象,当TextField对象发生Action事件时,会 生成一个ActionEvent对象,该对象作为参数传递给ActionListener对 象的actionPerformer方法在方法中可以获取该对象的信息,并做相应 的处理。 TFActionEvent.java /TextField事件监听初步 TFMath.java /数学运算及内部类初步 13 江苏大学软件工程课程组 使用内部类的事件处理: 为事件处理使用内部类使你能够访问 外部类的专用数据。 好处: 可以方便的访问包装类的成员 可以更清楚的组织逻辑 ,防止不应该被其它类访问 的类 进行访问 何时使用 该类吧不允许或不需要其他类进行访问时 内部类 14 江苏大学软件工程课程组 事件适配器 定义的侦听器类可以扩展适配器类并仅替代你所需要的方法 。 要实现每个侦听器接口中所有的方法,工作量很大,尤其是 MouseListener和WindowListener 示例: import java.awt.*; import java.awt.event.*; public class MouseClickHandler extends MouseAdapter /我们只需要 mouseClick 处理器, /因此,我们使用适配器来避免编写所有事件处理器方法 public void mouseClicked(MouseEvent e) / 鼠标单击时 的操作. 使用适配器可以避免监听器类定义没有必要的 空方法 15 江苏大学软件工程课程组 鼠标事件适配器 抽象类java.awt.event.MouseAdapter实现了MouseListener接口 ,可以使用其子类作为MouseEvent的监听器,只要重写其相应的方法 即可。 对于其他的监听器,也有对应的适配器。 Repaint()update()paint() 当我们应用程序的逻辑要对系统界面进行更新时,调用repaint() 方法 来通知AWT线程进行刷新操作。repaint() 方法实际会让AWT线程去调 用另外一个方法,update。update方法在默认情况下会做两件事,一 是清除当前区域内容,二是调用其paint()方法完成实际绘制工作。 MyMouseAdapter.java 16 江苏大学软件工程课程组 package java.awt.event; public abstract class MouseAdapter implements MouseListener public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) 17 江苏大学软件工程课程组 Window 事件 Window事件所对应的事件类为WindowEvent ,所对应的事件监听接 口为WindowListener 。 WindowListener定义的方法有: public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) 与WindowListener对应的适配器为 WindowAdapter。 TestWindowClose.java TestAnonymous2.java 18 江苏大学软件工程课程组 键盘事件 当按下、释放或敲击键盘上一个键时就发生了键盘事件,在Java1.2事 件模式中,必须要有发生事件的事件源。当一个组件处于激活状态时, 敲击键盘上一个键就导致这个组件上发生了键盘事件。 事件源使用addKeyListener方法获得监视器。 使用KeyListener接口处理键盘事件 .接口KeyListener中有3个方法: public void keyPressed(KeyEvent e), public void keyTyped(KeyEvent e), public void KeyReleased(KeyEvent e)。 TestKey.java 19 江苏大学软件工程课程组 菜单栏 单击某个菜单项可以发生ActionEvent事件,因此,我们可 以通过处理ActionEvent事件实现我们想要进行的操作。 可以使用MenuShotcut类为菜单项设置快捷键,该类的一 个构造方法是: MenuShotcut (int key); 其中key可以取值:KeyEvent.VK_A KeyEvent.VK_Z; 菜单项使用setShortcut(MenuShortcut k)方法来设置快捷 键。 框架可以获得菜单栏,菜单栏可以获得 0 个或多个菜单 ,菜单可以获取 0 个或多个菜单项(包括子菜单)。 20 江苏大学软件工程课程组 创建菜单栏 创建菜单栏对 象,将它设置到菜单容器中,就象一个框 架一样,例如: Frame f = new Frame(“MenuBar“); MenuBar mb = new MenuBar(); f.setMenuBar(mb); 21 江苏大学软件工程课程组 创建菜单 创建一个或多个菜单对象,将它们添加到菜单栏对 象,例 如: Frame f = new Frame(“Menu“); MenuBar mb = new MenuBar(); Menu m1 = new Menu(“File“); Menu m2 = new Menu(“Edit“); Menu m3 = new Menu(“Help“); mb.add(m1); mb.add(m2); mb.setHelpMenu(m3); f.setMenuBar(mb); 22 江苏大学软件工程课程组 创建菜单项 创建一个或多个菜单项对 象,将它们添加到菜单对象, 例如: MenuItem mi1 = new MenuItem(“New“); MenuItem mi2 = new MenuItem(“Save“); MenuItem mi3 = new MenuItem(“Load“); MenuItem mi4 = new MenuItem(“Quit“); mi1.addActionListener(this); mi2.addActionListener(this); mi3.addActionListener(this); mi4.addActionListener(this); m1.add(mi1); m1.add(mi2); m1.add(mi3); m1.addSeparator(); m1.add(mi4); 23 江苏大学软件工程课程组 创建选择框菜单项 创建选择框菜单项: CheckboxMenuItem mi5 = newCheckboxMenuItem(“Persistent“); mi5.addItemListener(this); m1.add(mi5); 24 江苏大学软件工程课程组 控制视觉外观 控制 GUI 视觉外观的命令有: Colors: setForeground() setBackground() 示例: Color purple = new Color(255, 0, 255); Button b = new Button(“Purple”); b.setBackground(purple); 25 江苏大学软件工程课程组 J.F.C./Swi

温馨提示

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

评论

0/150

提交评论