JAVA事件处理机制.ppt

上传人:本田雅阁 文档编号:2976860 上传时间:2019-06-16 格式:PPT 页数:27 大小:138.01KB
返回 下载 相关 举报
JAVA事件处理机制.ppt_第1页
第1页 / 共27页
JAVA事件处理机制.ppt_第2页
第2页 / 共27页
JAVA事件处理机制.ppt_第3页
第3页 / 共27页
JAVA事件处理机制.ppt_第4页
第4页 / 共27页
JAVA事件处理机制.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《JAVA事件处理机制.ppt》由会员分享,可在线阅读,更多相关《JAVA事件处理机制.ppt(27页珍藏版)》请在三一文库上搜索。

1、1,第15讲 JAVA事件处理机制,本讲内容 事件 事件的概念与事件对象 事件源 事件类型 事件处理机制 事件处理器(事件处理方法) 事件监听器接口与事件监听器类 事件监听器适配器,2,GUI的设计步骤,建立用户界面 设计一个顶层容器对象,如JFrame 确定布局,增加组件 改变组件颜色、字体 增加事件处理 编写事件监听器类(内含事件处理方法) 在事件源上注册事件监听器对象 显示用户界面,3,事件处理机制的几个重要概念,事件 事件是用户在界面上的一个操作(通常使用各种输入设备,如:鼠标、键盘等来完成)。 当一个事件发生时,该事件用一个事件对象来表示。事件对象有对应的事件类。不同的事件类描述不同

2、类型的用户动作。事件类包含在java.awt.event和javax.swing.event包中。 事件源 产生事件的组件叫事件源。在一个按钮上单击鼠标时,该按钮就是事件源,会产生一个ActionEvent类型的事件。,4,事件处理机制的几个重要概念,事件处理器(事件处理方法) 事件处理器是一个接收事件对象并进行相应处理的方法。事件处理器包含在一个类中,这个类的对象负责检查事件是否发生,若发生就激活事件处理器进行处理。,5,事件处理机制的几个重要概念,事件监听器类 包含事件处理器,并负责检查事件是否发生,若发生就激活事件处理器进行处理的类叫做事件监听器类。其实例就是事件监听器对象。事件监听器类

3、必须实现事件监听器接口或继承事件监听器适配器类。 事件监听器接口定义了处理事件必须实现的方法。事件监听器适配器类是对事件监听器接口的简单实现。目的是为了减少编程的工作量。 事件监听器接口和事件监听器适配器类也都包含在java.awt.event和javax.swing.event包中。,6,事件处理机制的几个重要概念,注册事件监听器 为了能够让事件监听器检查某个组件(事件源)是否发生了某些事件,并且在发生时激活事件处理器进行相应的处理,必须在事件源上注册事件监听器。这是通过使用事件源组件的以下方法来完成的: addXxxListener(事件监听器对象) Xxx对应相应的事件类。,7,事件处理

4、机制-委托事件处理,图形界面程序 (一个类),监听器类 (含事件处理器),监听器对象 (含事件处理器),实例化,注册,外 部 动 作,事件 对象,产生并传递事件对象,接收事件对象,激活事件处理器,实现预定功能,事件源 (例如一个按钮),含有,8,事件处理实例:关闭窗口,图形界面程序 (TestFrame),窗口监听器类 MyWindowListener (含关闭窗口 事件处理器),窗口监听器对象 (含关闭窗口 事件处理器),实例化,注册,单 击 关 闭 按 钮,事件 对象 e,产生并传递窗口事件对象 WindowEvent e,接收事件对象e,激活事件处理器,实现关闭窗口功能。,事件源 窗口对

5、象fr,含有,9,在重复一遍GUI的设计步骤,建立用户界面 设计一个顶层容器对象,如JFrame 确定布局,增加组件 改变组件颜色、字体 增加事件处理 编写事件监听器类(内含事件处理方法) 在事件源上注册事件监听器对象 显示用户界面,10,监听器类-MyWindowListener.java,import java.awt.event.WindowListener; import java.awt.event.WindowEvent; public class MyWindowListener implements WindowListener public void windowClosin

6、g(WindowEvent e) /事件处理器 e.getWindow().setVisible(false); e.getWindow().dispose(); System.exit(0); ,11,图形界面程序-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); /设置窗口背

7、景颜色 /注册事件监听器对象,Frame组件对象fr为事件源 fr.addWindowListener(new MyWindowListener(); fr.setVisible(true); /显示窗口 ,12,再论事件处理机制,事件、事件监听器接口、事件监听器类: 每一类事件有一个相应的事件监听器接口,该接口定义了接收和处理事件的抽象方法。实现该接口的类,就是监听器类。其对象可作为监听器对象向相应的组件注册。 事件的类名通常为:XxxEvent 对应的事件监听器接口名通常为:XxxListener 一个监听器接口定义了一种以上的抽象事件处理方法(事件处理器)。 事件监听器类实现事件监听器接

8、口,其类名可以由我们自己取。事件监听器类需要我们自己编写。 一个组件可以注册一个或多个监听器对象,事件对象只向已注册的监听器对象报告事件的发生。,13,事件监听器类的编写要点,事件监听器类应该包括以下两部分内容: 1.在事件监听器类的声明中指定要实现的监听器接口名,如: public class MyListener implements XxxListener 2.实现监听器接口中的事件处理方法,如: public void 事件处理方法名(XxxEvent e) ./处理某个事件的代码. 然后,在一个或多个组件上可以进行监听器类的实例的注册。如:组件对象.addXxxListener(My

9、Listener对象);,14,事件监听器类实例,import java awt.event.* ; public class ButtonHandler implements ActionListener public void actionPerformed(ActionEvent e) System.out.println(“Action occurred”); System.out.println(“Buttons label is:”+ e.getActionCommand(); ,15,使用事件监听器类,import java.awt.*; public class TestBut

10、ton 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) ; ,16,事件处理的编程方法总结,要处理某GUI组件(假定为c)上发生的XXXEvent事件,其通用的编程方法是: 编写一个监听器类,该监听器类实现了XXXListener接口,(假定监听器类的类名为

11、MyXXXListener); 在MyXXXListener中的相应事件处理方法中编写事件处理代码(事件处理器)。 调用GUI组件c的addXXXListener()方法注册事件监听器对象。 c.addXXXListener(new MyXXXListener(); 要处理C上的多种事件,可以编写多个相应的监听器类,进行多次注册。也可以编写一个实现了多个监听器接口的类,进行一次注册。,17,图形用户界面编程技巧,通常将图形组件作为类的成员 将事件监听器类写成GUI类的内部类,方便对组件进行访问。,18,监听器适配器类,JAVA中提供了大部分监听器接口的适配器类,其目的是简化事件监听器类的编写,

12、监听器适配器类是对事件监听器接口的简单实现(方法体为空),这样用户可以把自己的监听器类声明为适配器类的子类,从而可以不管其他方法,只需重写需要的方法。 对应于监听器接口XxxListener的适配器接口的类名为XxxAdapter。 public class MouseClickHandler extends MouseAdapter public void mouseClicked(MouseEvent e) . ,例:重写关闭窗口的例子,19,事件、接口、适配器与事件处理方法对应表,20,事件、接口、适配器与事件处理方法对应表,21,一个监听器实现多个监听器接口 一个监听器对象注册到多个组

13、件,22,实例,一个监听器实现多个监听器接口 一个监听器对象注册到多个组件 实例代码,23,实例,在同一个组件上注册多个监听器。 方法是根据需要多次调用addXXXListener() 方法注册多个监听器。 实例代码,24,使用内部类进行事件处理(有名内部类),优点 既可使用Adaptor类,又避免多重继承的限制。 便于访问类中的各种成员。 方法 在一个类中定义内部类,由内部类继承相应Adaptor类。 例 public class MyClass extends Applet /MyClass不能再继承MouseAdapter类 . someObject.addMouseListener(n

14、ew MyAdapter(); /注册监听器对象 . class MyAdapter extends MouseAdapter /实现监听器的内部类 public void mouseClicked(MouseEvent e) ./Event handler implementation goes here. ,25,实例,有名内部类代码,26,使用内部类进行事件处理(匿名类),匿名类(Anonymous Class)是没有名字的类。可以使用匿名内部类进行事件处理。 例: public class MyClass extends Applet . someObject.addMouseList

15、ener( new MouseAdapter() public void mouseClicked(MouseEvent e) ./事件处理器代码 ); . 实例代码,27,习题,习题:利用图形界面编写一个简单的文本编辑器,包含一个文本域和一个保存按钮。单击保存按钮将文本域(TextArea)中的内容保存到一个文本文件mytext.txt中。 提示: 使用TextArea的getText()方法可以获得文本域中的内容。 使用内部类定义事件监听器,实现事件监听器接口ActionListener。 可使用fileWriter的Write(String str, int off, int len)方法将内容写入文件。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1