JAVA事件处理机制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
增加事件处理
编写事件监听器类(内含事件处理方法) 在事件源上注册事件监听器对象
显示用户界面
9
监听器类-MyWindowListener.java
import java.awt.event.WindowListener; import java.awt.event.WindowEvent; public class MyWindowListener implements WindowListener { … public void windowClosing(WindowEvent e) //事件处理器 { e.getWindow().setVisible(false); e.getWindow().dispose(); System.exit(0); } … }
16
图形用户界面编程技巧
通常将图形组件作为类的成员 将事件监听器类写成GUI类的内部类,方便 对组件进行访问。
17
监听器适配器类
JAVA中提供了大部分监听器接口的适配器类,其目的是简化事 件监听器类的编写,监听器适配器类是对事件监听器接口的简 单实现(方法体为空),这样用户可以把自己的监听器类声明 为适配器类的子类,从而可以不管其他方法,只需重写需要的 方法。 对应于监听器接口XxxListener的适配器接口的类名为 XxxAdapter。 … public class MouseClickHandler extends MouseAdapter{ public void mouseClicked(MouseEvent e){ …. } }
4
事件处理机制的几个重要概念
事件监听器类
包含事件处理器,并负责检查事件是否发生,若发生就 激活事件处理器进行处理的类叫做事件监听器类。其实 例就是事件监听器对象。事件监听器类必须实现事件监 听器接口或继承事件监听器适配器类。 事件监听器接口定义了处理事件必须实现的方法。事件 监听器适配器类是对事件监听器接口的简单实现。目的 是为了减少编程的工作量。 事件监听器接口和事件监听器适配器类也都包含在 java.awt.event和javax.swing.event包中。
13
事件监听器类实例
import java awt.event.* ; public class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println(“Action occurred”); System.out.println(“Button’s label is:”+ e.getActionCommand()); } }
5
事件处理机制的几个重要概念
注册事件监听器
为了能够让事件监听器检查某个组件(事件源) 是否发生了某些事件,并且在发生时激活事件 处理器进行相应的处理,必须在事件源上注册 事件监听器。这是通过使用事件源组件的以下 方法来完成的:
addXxxListener(事件监听器对象) Xxx对应相应的事件类。
第15讲 JAVA事件处理机制
本讲内容 事件
事件的概念与事件对象 事件源 事件类型
事件处理机制
事件处理器(事件处理方法) 事件监听器接口与事件监听器类 事件监听器适配器
1
GUI的设计步骤
建立用户界面
设计一个顶层容器对象,如JFrame 确定布局,增加组件 改变组件颜色、字体
增加事件处理
编写事件监听器类(内含事件处理方法) 在事件源上注册事件监听器对象
11
再论事件处理机制
事件、事件监听器接口、事件监听器类: 每一类事件有一个相应的事件监听器接口,该接口定义了接收和 处理事件的抽象方法。实现该接口的类,就是监听器类。其对象 可作为监听器对象向相应的组件注册。 事件的类名通常为:XxxEvent 对应的事件监听器接口名通常为:XxxListener 一个监听器接口定义了一种以上的抽象事件处理方法(事件处理 器)。 事件监听器类实现事件监听器接口,其类名可以由我们自己取。 事件监听器类需要我们自己编写。 一个组件可以注册一个或多个监听器对象,事件对象只向已注册 的监听器对象报告事件的发生。
例:重写关闭窗口的例子
18
事件、接口、 事件、接口、适配器与事件处理方法对应 表
事件
ActionEvent AdjustmentE vent ComponentE vent
监听器接口
ActionLቤተ መጻሕፍቲ ባይዱstener
监听器适配器类
无
事件处理方法
actionPerformed adjustmentValueChanged componentHidden componentMoved componentResized componentShown componentAdded componentRemoved focusGained focusLost itemStateChanged
15
事件处理的编程方法总结
要处理某GUI组件(假定为c)上发生的 XXXEvent事件,其通用的编程方法是:
编写一个监听器类,该监听器类实现了XXXListener接 口,(假定监听器类的类名为MyXXXListener); 在MyXXXListener中的相应事件处理方法中编写事件处 理代码(事件处理器)。 调用GUI组件c的addXXXListener()方法注册事件监听 器对象。 c.addXXXListener(new MyXXXListener()); 要处理C上的多种事件,可以编写多个相应的监听器类, 进行多次注册。也可以编写一个实现了多个监听器接口 的类,进行一次注册。
10
图形界面程序-TestFrame.java
import java.awt.*; public class TestFrame { public static void main(String [] args) { Frame fr=new Frame(“事件处理实例"); fr.setSize(500,500); //设置窗口的大小 fr.setBackground(Color.green); //设置窗口背景颜色 //注册事件监听器对象,Frame组件对象fr为事件源 fr.addWindowListener(new MyWindowListener()); fr.setVisible(true); //显示窗口 } }
优点
既可使用Adaptor类,又避免多重继承的限制。 便于访问类中的各种成员。
方法
在一个类中定义内部类,由内部类继承相应Adaptor类。 例 public class MyClass extends Applet { //MyClass //MyClass不能再继承MouseAdapter类 MouseAdapter ... someObject.addMouseListener(new MyAdapter()); //注册监听器对象 ... class MyAdapter extends MouseAdapter { //实现监听器的内部类 public void mouseClicked(MouseEvent e) { ...//Event handler implementation goes here... } } }
20
MouseEvent
MouseListener
MouseAdapter
MouseMotion Event TextEvent
MouseMotionListen er TextListener
MouseMotionAdapter
无
WindowEvent
WindowListener
WindowAdapter
显示用户界面
2
事件处理机制的几个重要概念
事件
事件是用户在界面上的一个操作(通常使用各种输入设 备,如:鼠标、键盘等来完成)。 当一个事件发生时,该事件用一个事件对象来表示。事 件对象有对应的事件类。不同的事件类描述不同类型的 用户动作。事件类包含在java.awt.event和 javax.swing.event包中。
6
事件处理机制---委托事件处理
产生并传 递事件对 象
事件 对象
外 部 动 作 事件源
接收事件对象,激活 事件处理器,实现预 定功能
(例如一个按钮)
注册
监听器对象
(含事件处理器)
实例化
监听器类
(含事件处理器)
含有
图形界面程序
(一个类)
7
事件处理实例:关闭窗口
单 击 关 闭 按 钮 产生并传递窗 口事件对象 WindowEvent e 接收事件对象e,激活事件 处理器,实现关闭窗口功能。
一个监听器实现多个监听器接口 一个监听器对象注册到多个组件
21
实例
一个监听器实现多个监听器接口 一个监听器对象注册到多个组件
实例代码
22
实例
在同一个组件上注册多个监听器。 方法是根据需要多次调用 addXXXListener() 方法注册多个监听器。 实例代码
23
使用内部类进行事件处理(有名内部类)
14
使用事件监听器类
import java.awt.*; public class TestButton{ public static void main(String args[ ]) { Frame f = new Frame(“Test”); Button b = new Button(“Press Me!”); b.addActionListener(new ButtonHandler( )); f.add(b, “Center”); f.pack( ); f.setVisible(true) ; } }
无
事件、接口、 事件、接口、适配器与事件处理方法对应表
事件
KeyEvent
监听器接口
KeyListener
监听器适配器类
KeyAdapter
事件处理方法
keyPressed keyReleased keyTyped mouseClicked mouseEntered mouseExited mousePressed mouseReleased mouseDragged mouseMoved textValueChanged windowActivated windowClosed windowClosing windowDeactivated windowDeiconified windowIconified windowOpened
19
AdjustmentListe 无 ner ComponentList ener ComponentAdapter
ContainerEve ContainerListen ContainerAdapter nt er FocusEvent ItemEvent FocusListener ItemListener FocusAdapter
12
事件监听器类的编写要点
事件监听器类应该包括以下两部分内容: 事件监听器类应该包括以下两部分内容: 1.在事件监听器类的声明中指定要实现的监听器接口名,如: 在事件监听器类的声明中指定要实现的监听器接口名, 在事件监听器类的声明中指定要实现的监听器接口名 public class MyListener implements XxxListener { … } 2.实现监听器接口中的事件处理方法,如: 实现监听器接口中的事件处理方法, 实现监听器接口中的事件处理方法 public void 事件处理方法名(XxxEvent e) { ...//处理某个事件的代码... } 然后,在一个或多个组件上可以进行监听器类的实例的注册。 然后,在一个或多个组件上可以进行监听器类的实例的注册。如: 组件对象.addXxxListener(MyListener对象);
事件 对象 e
窗口监听器对象 注册
(含关闭窗口 事件处理器) 实例化
事件源
窗口对象fr
窗口监听器类 MyWindowListener
(含关闭窗口 事件处理器)
含有
图形界面程序
(TestFrame)
8
在重复一遍GUI的设计步骤
建立用户界面
设计一个顶层容器对象,如JFrame 确定布局,增加组件 改变组件颜色、字体
事件源
产生事件的组件叫事件源。在一个按钮上单击鼠标时, 该按钮就是事件源,会产生一个ActionEvent类型的事 件。
3
事件处理机制的几个重要概念
事件处理器(事件处理方法)
事件处理器是一个接收事件对象并进行相应处 理的方法。事件处理器包含在一个类中,这个 类的对象负责检查事件是否发生,若发生就激 活事件处理器进行处理。