博学谷——让IT教学更简单,让IT学习更有效
第九章 GUI
案例9-1 AWT事件处理机制
一、案例描述
1、 考核知识点
编号:00109002
名称:AWT事件处理机制
2、 练习目标
? 掌握如何使用AWT事件处理机制
3、 需求分析
事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标、按下键盘等操作,就需要使用AWT的事件处理机制。为了让初学者熟悉AWT的事件处理机制,本案例将实现关闭一个窗口的功能。
4、 设计思路(实现原理)
1)编写类Example01
2)建立一个窗体,名为“第一个窗体”
3)定义一个类MyWindowListener实现事件监听器的接口WindowListener。 4)通过addWindowListener()方法为事件源注册事件监听器对象。
二、案例实现
import java.awt.*; import java.awt.event.*; public class Example01 {
public static void main(String[] args) { }
1
// 建立新窗体
Frame f = new Frame(\第一个窗体!\// 设置窗体的宽和高 f.setSize(300, 300); // 设置窗体的出现的位置 f.setLocation(300, 200); // 设置窗体可见 f.setVisible(true); // 为窗口组件注册监听器 f.addWindowListener(mw);
MyWindowListener mw=new MyWindowListener();
博学谷——让IT教学更简单,让IT学习更有效
}
// 创建MyWindowListener类实现WindowListener接口 class MyWindowListener implements WindowListener { }
// 监听器监听事件对象作出处理
public void windowClosing(WindowEvent e) { }
public void windowActivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
Window window = e.getWindow(); window.setVisible(false); // 释放窗口
window.dispose();
运行结果如图9-1所示。
图9-1 第一个窗体
点击窗体右上角的关闭按钮,窗体关闭。
三、案例总结
1、在AWT事件处理机制中几个比较重要的相关概念,具体如下所示: ? 事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。 ? 事件源(组件):事件发生的场所,通常就是产生事件的组件。 ? 监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包
2
博学谷——让IT教学更简单,让IT学习更有效
含事件处理器)。
? 事件处理器:监听器对象对接收的事件对象进行相应处理的方法。 2、事件对象、事件源、监听器、事件处理器在整个事件处理机制中都起着非常重要的作用,它们彼此之间有着非常紧密的联系,接下来用一个图例来描述事件处理的工作流程,如图9-2所示。
外部动作事件对象2.触发事件源上的事件3.产生并传递事件对象4.接收事件对象,激活事件处理器,实现预定功能事件源(组件)1.将监听器注册到事件源监听器(含处理器) 图9-2 事件处理流程图 图9-2中,事件源是一个组件,当用户进行一些操作时,如按下鼠标,或者释放键盘等,这些动作会触发相应的事件。如果事件源注册了事件监听器,则触发的相应事件将会被处理。
案例9-2 使用适配器类改进窗体关闭 一、案例描述
1、 考核知识点
编号:00109003
名称:AWT事件适配器
2、 练习目标
? 掌握如何使用AWT事件适配器。
3、 需求分析
JDK提供了一些适配器类,它们是监听器接口的默认实现类,这些实现类中实现了接口的所有方法,但方法中没有任何代码。程序可以通过继承适配器类来达到实现监听器接口的目的。为了让初学者熟悉AWT事件适配器,本案例将使用AWT事件适配器优化窗体关闭代码。
4、 设计思路(实现原理)
1)编写Example02类
2)建立一个窗体,名为“第一个窗体”
3)定义一个MyWindowListener类继承适配器类WindowAdapter。 4)重写适配器类中的windowClosing()方法
二、案例实现
import java.awt.*; import java.awt.event.*; public class Example02 {
3
博学谷——让IT教学更简单,让IT学习更有效
}
// 继承WindowAdapter类,重写windowClosing()方法 class MyWindowListener extends WindowAdapter { }
public void windowClosing(WindowEvent e) { }
Window window = (Window) e.getComponent(); window.dispose();
public static void main(String[] args) { }
// 建立新窗体
Frame f = new Frame(\第一个窗体!\// 设置窗体的宽和高 f.setSize(300, 300); // 设置窗体的出现的位置 f.setLocation(300, 200); // 设置窗体可见 f.setVisible(true); // 为窗口组件注册监听器
f.addWindowListener(new MyWindowListener());
运行结果如图9-3所示。
图9-3 运行结果
点击窗体右上角的关闭按钮,窗体关闭。
三、案例总结
在本案例中定义的MyWindowListener类继承了适配器类WindowAdapter,同样实现了关闭窗口的功能,却减少了很多代码。需要注意的是,几乎所有的监听器接口都有对应的适配器类,通过继承适配器类来实现监听器接口时,需要处理哪种事件,直接重写该事件对应的方法即可。由于适配器主要是为了减少不必要的代码,所以在方法数不超过3个时候,不需要继承适配器类。
4
博学谷——让IT教学更简单,让IT学习更有效
案例9-3 窗体事件 一、案例描述
1、 考核知识点
编号:00109004 名称:窗体事件
2、 练习目标
? 掌握窗体事件的处理
3、 需求分析
当对窗体进行操作时,比如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件,JDK中提供了一个类WindowEvent用于表示这些窗体事件。为了让初学者掌握窗体事件的处理,本案例将实现对窗体事件的监听。
4、 设计思路(实现原理)
1) 编写类Example03,创建一个窗体。 2) 创建WindowListener实例对象。
3) 通过addWindowListener()方法将窗体对象与窗体监听器绑定。 4)运行程序,对生成的窗体操作,观察控制台输出的内容。
二、案例实现
编写Example03类,代码如下所示:
import java.awt.*; import java.awt.event.*; public class Example03 {
public static void main(String[] args) {
final Frame f = new Frame(\窗体事件\f.setSize(400,300); f.setLocation(300,200); f.setVisible(true);
f.addWindowListener(new WindowListener() {
public void windowOpened(WindowEvent e) { }
public void windowActivated(WindowEvent e) {
}
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) {
5
System.out.println(\窗体图标化\System.out.println(\窗体激活\System.out.println(\窗体打开\
// 使用内部类创建WindowListener实例对象,监听窗体事件