Java中,当我们要实现一个 WindowListener 接口,则必须定义该接口内的所有方法。(该接口中的方法比较多)。那么能不能让我们只重写自己的程序需要的部分呢?
当然是可以的,这里就要用到我们的WindowAdapter类。
1.接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
2.扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。(如果要实现 WindowListener 接口,则必须定义该接口内的所有方法。此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法。)
3.使用扩展的类可以创建侦听器对象,然后使用窗口的 addWindowListener 方法向该窗口注册侦听器。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
这里给出一个窗口事件的分类
GUI程序中,经常在窗口发生变化的时候添加处理。比如说窗口关闭、打开、最大最小化等等。
Java中窗口事件监听有三种:WindowListener、WindowStateListener、WindowFocusListener,分别表示窗口监听、窗口转态监听和窗口焦点监听。这三种对应的窗口事件都是WindowEvent。
看下面的表格:
WindowStateListener接口
方法名 | 作用 |
---|---|
windowStateChanged | 窗口正在正常、最大最小化的时候 |
; WindowFocusListener接口
方法名 | 作用 |
---|---|
windowGainedFocus | 窗口获得焦点时发生 |
windowLostFocus | 窗口失去焦点时发生 |
; WindowListener接口
方法名 | 作用 |
---|---|
windowOpened | 窗口第一次打开时发生 |
windowClosing | 窗口主动关闭时发生 |
windowClosed | 窗口被动关闭时发生 |
windoIconified | 窗口最小化时发生 |
windowDeiconified | 窗口从最小化还原时发生 |
windowActivated | 窗口激活为当前窗口时发生 |
windowDeactivated | 窗口为非当前窗口时发生 |
那么我们写窗口事件的监视器类的时候,不可能把这些方法都重写,这个时候我们只需要扩展WindowAdapter类就行,然后只实现自己想要的部分。
下面看一个具体的例子吧:
package cn.com;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class My extends JFrame
{
public void init()
{
//注册监视器
this.addWindowListener(new WindowHandler());
//窗口属性设置
this.setSize(700, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//窗口激活监听实例类
private class WindowHandler extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.out.println("窗口主动关闭时发生");
}
public void windowOpened (WindowEvent e)
{
System.out.println("窗口第一次被打开");
}
}
public My()
{
init();
}
}
这里我们就可以只关注我们想要的了,其他的方法就可以不写。道友们可以测试下。