当前位置:文档之家› JAVA事件处理机制

JAVA事件处理机制


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) ; } }
12
事件监听器类的编写要点
事件监听器类应该包括以下两部分内容: 事件监听器类应该包括以下两部分内容: 1.在事件监听器类的声明中指定要实现的监听器接口名,如: 在事件监听器类的声明中指定要实现的监听器接口名, 在事件监听器类的声明中指定要实现的监听器接口名 public class MyListener implements XxxListener { … } 2.实现监听器接口中的事件处理方法,如: 实现监听器接口中的事件处理方法, 实现监听器接口中的事件处理方法 public void 事件处理方法名(XxxEvent e) { ...//处理某个事件的代码... } 然后,在一个或多个组件上可以进行监听器类的实例的注册。 然后,在一个或多个组件上可以进行监听器类的实例的注册。如: 组件对象.addXxxListener(MyListener对象);
5
事件处理机制的几个重要概念
注册事件监听器
为了能够让事件监听器检查某个组件(事件源) 是否发生了某些事件,并且在发生时激活事件 处理器进行相应的处理,必须在事件源上注册 事件监听器。这是通过使用事件源组件的以下 方法来完成的:
addXxxListener(事件监听器对象) Xxx对应相应的事件类。
4
事件处理机制的几个重要概念
事件监听器类
包含事件处理器,并负责检查事件是否发生,若发生就 激活事件处理器进行处理的类叫做事件监听器类。其实 例就是事件监听器对象。事件监听器类必须实现事件监 听器接口或继承事件监听器适配器类。 事件监听器接口定义了处理事件必须实现的方法。事件 监听器适配器类是对事件监听器接口的简单实现。目的 是为了减少编程的工作量。 事件监听器接口和事件监听器适配器类也都包含在 java.awt.event和javax.swing.event包中。
显示用户界面
2
事件处理机制的几个重要概念
事件
事件是用户在界面上的一个操作(通常使用各种输入设 备,如:鼠标、键盘等来完成)。 当一个事件发生时,该事件用一个事件对象来表示。事 件对象有对应的事件类。不同的事件类描述不同类型的 用户动作。事件类包含在java.awt.event和 javax.swing.event包中。
事件源
产生事件的组件叫事件源。在一个按钮上单击鼠标时, 该按钮就是事件源,会产生一个ActionEvent类型的事 件。
3
事件处理机制的几个重要概念
事件处理器(事件处理方法)
事件处理器是一个接收事件对象并进行相应处 理的方法。事件处理器包含在一个类中,这个 类的对象负责检查事件是否发生,若发生就激 活事件处理器进行处理。
15
事件处理的编程方法总结
要处理某GUI组件(假定为c)上发生的 XXXEvent事件,其通用的编程方法是:
编写一个监听器类,该监听器类实现了XXXListener接 口,(假定监听器类的类名为MyXXXListener); 在MyXXXListener中的相应事件处理方法中编写事件处 理代码(事件处理器)。 调用GUI组件c的addXXXListener()方法注册事件监听 器对象。 c.addXXXListener(new MyXXXListener()); 要处理C上的多种事件,可以编写多个相应的监听器类, 进行多次注册。也可以编写一个实现了多个监听器接口 的类,进行一次注册。
第15讲 JAVA事件处理机制
本讲内容 事件
事件的概念与事件对象 事件源 事件类型
事件处理机制
事件处理器(事件处理方法) 事件监听器接口与事件监听器类 事件监听器适配器
1
GUI的设计步骤
建立用户界面
设计一个顶层容器对象,如JFrame 确定布局,增加组件 改变组件颜色、字体
增加事件处理
编写事件监听器类(内含事件处理方法) 在事件源上注册事件监听器对象

事件、接口、 事件、接口、适配器与事件处理方法对应表
事件
KeyEvent
监听器接口
KeyListener
监听器适配器类
KeyAdapter
事件处理方法
keyPressed keyReleased keyTyped mouseClicked mouseEntered mouseExited mousePressed mouseReleased mouseDragged mouseMoved textValueChanged windowActivated windowClosed windowClosing windowDeactivated windowDeiconified windowIconified windowOpened
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); //显示窗口 } }
6
事件处理机制---委托事件处理
产生并传 递事件对 象
事件 对象
外 部 动 作 事件源
接收事件对象,激活 事件处理器,实现预 定功能
(例如一个按钮)
注册
监听器对象
(含事件处理器)
实例化
监听器类
(含事件处理器)
含有
图形界面程序
(一个类)
7
事件处理实例:关闭窗口
单 击 关 闭 按 钮 产生并传递窗 口事件对象 WindowEvent e 接收事件对象e,激活事件 处理器,实现关闭窗口功能。
优点
既可使用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... } } }
19
AdjustmentListe 无 ner ComponentList ener ComponentAdapter
ContainerEve ContainerListen ContainerAdapter nt er FocusEvent ItemEvent FocusListener ItemListener FocusAdapter
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()); } }
一个监听器实现多个监听器接口 一个监听器对象注册到多个组件
21
实例
一个监听器实现多个监听器接口 一个监听器对象注册到多个组件
实例代码
22
实例
在同一个组件上注册多个监听器。 方法是根据需要多次调用 addXXXListener() 方法注册多个监听器。 实例代码
23
使用内部类进行事件处理(有名内部类)
20
MouseEvent
MouseListener
MouseAdapter
MouseMotion Event TextEvent
MouseMotionListen er TextListener
MouseMotionAdapter

WindowEvent
WindowListener
WindowAdapter
增加事件处理
编写事件监听器类(内含事件处理方法) 在事件源上注册事件监听器对象
显示用户界面
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); } … }
相关主题