TP6-事件机制
第六章事件模型大连东方北 Nhomakorabea职业培训学校
回顾
• 抽象窗口工具包(AWT)是一组类,用来创建图形用 抽象窗口工具包( )是一组类, 户界面,并能够通过键盘和鼠标响应用户的操作。 户界面,并能够通过键盘和鼠标响应用户的操作。 • 两种常用容器类:框架(Frame类)和面板(Panel类) 两种常用容器类:框架( 类 和面板( 类 • AWT支持下列类型的组件:标签、文本域、文本区、 支持下列类型的组件: 支持下列类型的组件 标签、文本域、文本区、 按钮、复选框、列表框等。 按钮、复选框、列表框等。 • 布局管理器类提供控制 GUI 组件物理布局的一种方式。 组件物理布局的一种方式。
大连东方北佳职业培训学校
2
2
目标 • • • • • 事件控制的要点 AWT 事件结构 基本事件控制 使用多个监听器 匿名类
大连东方北佳职业培训学校
3
3
事件控制的要点 • Java 最新的事件处理方法是基于授权事件 模型 • 事件源生成事件并将其发送至一个或多个 监听器 • 监听器简单地等待,直到它收到一个事件。 监听器简单地等待,直到它收到一个事件。 一旦事件被接受,监听器将处理这些事件, 一旦事件被接受,监听器将处理这些事件, 然后返回。 然后返回。
接收到键盘输入时会生成此事件。 接收到键盘输入时会生成此事件。Component 拖动、移动、单击、 拖动、移动、单击、按下或释放 Component 鼠标或在鼠标进入或退出一个组 件时,会生成此事件。 件时,会生成此事件。 将组件添加至容器或从中删除时 Container 会生成此事件。 会生成此事件。 、 在文本区或文本域的文本改变时 TextField、 TextArea 会生成此事件 。 当一个窗口激活、关闭、失效、 当一个窗口激活、关闭、失效、 Window 恢复、最小化、 恢复、最小化、打开或退出时会 生成此事件。 生成此事件。
大连东方北佳职业培训学校
16 16
焦点事件示例
实现了当捕捉到失去 焦点事件时如何响应
public void focusLost(FocusEvent event) { if(event.getComponent() == ccField && !event.isTemporary()) { if(!checkFormat(ccField.getText())) ccField.requestFocus(); } 检验失去焦点的组件中 的文本格式是否正确 }
大连东方北佳职业培训学校
WindowListener
14 14
2
事件源、监听器和监听器接口
• 事件源描述事件对象中事件的性质。 事件源描述事件对象中事件的性质。 • 每个事件源都被映射至一个或多个事件监听器,发 每个事件源都被映射至一个或多个事件监听器, 生事件时需要调用这些事件监听器。 生事件时需要调用这些事件监听器。 • 事件源随后通过将事件对象传递至监听器接口类的 方法,将事件信息发送到监听器接口。 方法,将事件信息发送到监听器接口。 • 监听器分析事件对象找出事件信息,以便给出响 监听器分析事件对象找出事件信息, 应。
大连东方北佳职业培训学校
15 15
焦点事件
• 任何 GUI 对象的获得或失去焦点都被视为焦点 事件,并且事件源必须向事件监听器通知事件对 象已失去或已获得焦点。 • 焦点监听器需要实现两个方法:focusGained 和 focusLost。 • 要进行错误检查或数据校验时,对焦点的捕捉就 显得尤其重要。
适配器类 ComponentAdapter ContainerAdapter
FocusAdapter FocusListener private class MyMouseAdapter extends MouseAdapter { private Color bgColor; KeyAdapter KeyListener public MyMouseAdapter (Color c){ bgColor = c; } MouseAdapter MouseListener public void mouseClicked(MouseEvent mevent){ MouseMotionAdapter MouseMotionListener setBackground(bgColor); repaint(); } WindowAdapter }
AdjustmentEven 操纵滚动条时会生成此事件。 操纵滚动条时会生成此事件。 t ComponentEven 当一个组件移动、隐藏、调整 当一个组件移动、隐藏、 t 大小或成为可见时会生成此事 件。 ItemEvent 单击复选框或列表项时, 单击复选框或列表项时,或者 当一个选择框或一个可选菜单 的项被选择或取消时生成此事 件。 FocusEvent 组件获得或失去键盘焦点时会 生成此事件。 生成此事件。
大连东方北佳职业培训学校
5
5
事件源 • 事件源是一个生成事件的对象 • 一个事件源可能会生成不同类型的事件 • 事件源提供了一组方法,用于为事件注册 事件源提供了一组方法, 一个或多个监听器。 一个或多个监听器。 • 每种事件的类型都有其自己的注册方法。 每种事件的类型都有其自己的注册方法。 一般形式为: 一般形式为:
象的信息对事件做出响应
大连东方北佳职业培训学校
8
8
监听器接口 • 监听器通过实现 java.awt.event 包中定义的 一个或多个接口来创建。 一个或多个接口来创建。 • 在发生事件时,事件源将调用监听器定义 在发生事件时, 的相应方法。 的相应方法。 • 有兴趣接收事件的任何监听器类都必须实 现监听器接口。 现监听器接口。
windowActivated、 windowClosed 、 windowClosing、 windowDeactivated 、 windowDeiconified、windowIconified 、 windowOpened
大连东方北佳职业培训学校
18 18
窗口事件示例
class MyFrame extends Frame { boolean w; public MyFrame() { w=false; setTitle("测试适配器类 测试适配器类"); 测试适配器类 setSize(300, 200); MyPanel panel = new MyPanel(); add(panel); addWindowListener(new MyWindowAdapter()); import java.awt.*; }
大连东方北佳职业培训学校
MouseMotionListener mouseDragged、mouseMoved 、 TextListener WindowListener
11 11
AWT 事件类型 2-1
事件类 ActionEvent 说明 通常按下按钮, 通常按下按钮,双击列表项或 选中一个菜单项时, 选中一个菜单项时,就会生成 此事件。 此事件。 事件源 Button、List、 、 、 MenuItem、 、 TextField Scrollbar Component
public void add<EventType>Listener (TypeListener e)
大连东方北佳职业培训学校
6
6
AWT采取的事件控制过程 采取的事件控制过程
• 监听器对象属于一个类的实例,这个类实 现了一个特殊的接口,名为“监听者接口” • 事件源将在发生事件时向所有注册的监听 器发送事件对象。 • 监听器对象使用事件对象中的信息来确定 它们对事件的响应。
大连东方北佳职业培训学校
13 13
适配器类
为了使事件处理变得简单, 为了使事件处理变得简单,Java 为 具有多个方法的监听器接口提供适 配器类。 配器类。适配器类实现并提供了一 个事件监听器接口中的所有的方法, 个事件监听器接口中的所有的方法, 但这些方法都是空方法。 但这些方法都是空方法。 事件监听器接口 ComponentListener ContainerListener
大连东方北佳职业培训学校
7
7
按钮单击事件示例
public class MyEventTest extends Panel { 为按钮事件 Button myButton = new Button("蓝色 蓝色"); 蓝色 注册监听器 . . . // 创建面板或其他 GUI 组件 MyListener myAction = new MyListener(); MyButton.addActionListener(myAction); private class MyListener implements ActionListener { public MyListener() { 实现了ActionListener . . . // 初始化 接口的监听器 } public void actionPerformed(ActionEvent event) { . . .//需要为事件进行的操作 需要为事件进行的操作 } 实现了actionPerformed方法, 方法, 实现了 方法 } 以便根据参数 ActionEvent 对 }
大连东方北佳职业培训学校
ContainerListener FocusListener ItemListener
10 10
监听器接口列表 2-2
事件监听器 KeyListener MouseListener 方法 keyPressed、keyReleased 、 keyTyped mouseClicked、mouseEntered 、 mouseExited、mousePressed 、 mouseReleased textChanged windowActivated、windowDeactivated 、 windowClosed、windowClosing 、 windowIconified、windowDeiconified 、 windowOpened