当我们关闭窗口、缩小窗口、启动工作窗口等时都会产生窗口事件(WindowEvent),这时会产生 WindowEvent 事件对象传递给事件监听器 WindowListener 接口,可以使用此对象决定应该如何处理工作。
下面我们来看一下窗口事件 WindowEvent 和它的抽象类 WindowAdapter。
WindowEvent类
下列是 WindowEvent 类的方法。
方法
说明
Window getWindow( )
返回触发事件的窗口
String paramString( )
返回触发事件的窗口参数字符串
WindowListener 接口定义了下列 7 个方法。
方法
说明
void windowActivated(WindowEvent e)
非焦点窗口变焦点窗口
void windowClosed(WindowEvent e)
关闭窗口
void windowClosing(WindowEvent e)
正关闭窗口,可用此决定是否要关闭
void windowDeactivated(WindowEvent e)
由焦点窗口变非焦点窗口
void windowDeiconified(WindowEvent e)
窗口由最小化变一般状态
void windowIconified(WindowEvent e)
窗口由一般变非最小化
void windowOpened(WindowEvent e)
开启窗口
【示例 1】
这个程序只是实现 WindowListener 接口的方法,非常单纯,当我们操作 Window 时,提示消息窗口将列出窗口的操作项目,程序第 34 行调用 addWindowListener( ) 是执行注册。
package chapter2;
import java.awt.*; // 引入类库
import java.awt.event.*; // 因为有Event
public class ch20 {
static Frame frm = new Frame("ch20");
// 担任事件监听器和拥有事件处理器
static class myListener implements WindowListener { // 实现WindowListener
public void windowActivated(WindowEvent e) { // windowActivated事件处理器
System.out.println("windowActivated");
}
public void windowClosed(WindowEvent e) { // windouClosed事件处理器
System.out.println("windowClosed");
}
public void windowClosing(WindowEvent e) { // windomClosing事件处理器
System.out.println("windowClosing");
frm.dispose(); // 释放frm窗口资源再关闭面口
}
public void windowDeactivated(WindowEvent e) { // windowDeactivated事件处理器
System.out.println("windowDeactivated");
}
public void windowDeiconified(WindowEvent e) { // windomDeiconified事件处理器
System.out.println("windowDeiconified");
}
public void windowIconified(WindowEvent e) { // windowIconified事件处理器
System.out.println("windowIconified");
}
public void windonOpened(WindowEvent e) { // windowOpened事件处理器
System.out.println("windowOpened");
}
}
public static void main(String[] args) {
frm.setLayout(null); // 不设版面配置
frm.setSize(300, 160); // 宽300, 高160
frm.addWindowListener(new myListener()); // ---注册
frm.setVisible(true); // 显示窗口
}
}
程序运行后,结果如下:
windowActivated
windowOpened
windowIconified
windowDeactivated
windowDeiconified
windowActivated
windowClosing
windowDeactivated
windowClosed
WindowAdapter类
WindowAdapter 类是抽象类,可以用更方便的方式处理 WindowEvent 事件。这个类是实现 WindowListener 接口,但是实现内容是空的,可以在设计监听器时继承此类。此例是让 myListener 继承 WindowAdapter,这样可以只针对有需要的地方设计事件处理程序。
【示例 2】
重新设计示例 1,但是简化为只重写 windowClosing( ) 方法。
package chapter2;
import java.awt.*; // 引入类库
import java.awt.event.*; // 因为有Event
public class ch21 {
static Frame frm = new Frame("ch21");
// 担任事件监听器和拥有事件处理器
static class myListener extends WindowAdapter { // 继承WindowAdapter
public void windowClosing(WindowEvent e) { // windowClosing事件处理器
System.out.println("windowClosing");
frm.dispose(); // 释放frm窗口资源再关闭窗口
}
}
public static void main(String[] args) {
frm.setLayout(null); // 不设版面配置
frm.setSize(300, 160); // 宽300,高160
frm.addWindowListener(new myListener()); // ---注册
frm.setVisible(true); // 显示窗口
}
}
程序运行后,结果如下:
windowClosing