⚫第一种方法:使用适配器。
extends WindowAdapter
适配器的作用实际上就是把接口变成一个类,在使用时覆盖所需要的事件处理方法,像接口要实现所有的方法。
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class A {
public static void main(String[] args)
{
Frame f = new Frame("GUI");
f.setSize(150, 150);
M a = new M();
f.addWindowListener(a);
f.setVisible(true);
}
}
class M extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(1);
}
}
⚫第二种方法:加入接口方法
implements WindowListener
常规方式,对于接口中所用的方法都要实现,即使实现的方法没有方法体。
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class A extends Frame implements WindowListener {
public static void main(String args[]) {
A t = new A();
t.addWindowListener(t); // 添加监听器
t.setSize(150, 50);
t.setVisible(true);
}
public void windowActivated(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {// 实现监听器方法
}
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);// 结束程序
}
public void windowDeactivated(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowOpened(WindowEvent e) {
}
}
两者简单的比较:由于Java的类不允许多继承,在使用第一种方法后,该类就不能再继承其他父类了。
⚫最后一种:匿名类
匿名类是指在声明一个类时不给它命名,这里在方法的括号内不需要提供任何的类名直接实例化。
代码简洁。
无需显示【extends 父类名】 或者 【implements 接口名】
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class A {
public static void main(String[] args) {
Frame f = new Frame("Window3");
f.setSize(150, 50);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}