题目:
1. 编写程序,实现一个窗口,包含3个标签,其背景分别为红、黄、灰3色,并通过implements WindowListener接口或extends WindowAdapter适配器类实现窗口的关闭。
两种实现方式:
①用implements WindowListener接口方法
package Tuxinghua3;
import java.awt.*;
import java.awt.event.*;
//用implements WindowListener接口方法
public class njj01 extends Frame implements WindowListener {//继承Frame类,实现WindowListener接口
public static void main(String args[]){
njj01 window = new njj01();
window.setVisible(true);
}
public njj01(){
Label label1 = new Label("Red Label", Label.CENTER);
label1.setBackground(Color.RED);
Label label2 = new Label("Yellow Label", Label.CENTER);
label2.setBackground(Color.YELLOW);
Label label3 = new Label("Gray Label", Label.CENTER);
label3.setBackground(Color.GRAY);
Panel panel = new Panel(new FlowLayout());
panel.add(label1);
panel.add(label2);
panel.add(label3);
Panel emptyPanel = new Panel();
panel.add(emptyPanel);
add(panel);
addWindowListener(this);//为窗口添加一个窗口事件监听器,使用内部类的方式实现。
setTitle("NJj's Label Frame");
setSize(400, 300);
}
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {
dispose();
}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
②用extends WindowAdapter适配器的方法
package Tuxinghua3;
import java.awt.*;
import java.awt.event.*;
//用extends WindowAdapter适配器的方法
public class njj01 extends Frame {
public static void main(String args[]){
njj01 window = new njj01();
window.setVisible(true);
}
public njj01(){
Label label1 = new Label("Red Label", Label.CENTER);
label1.setBackground(Color.RED);
Label label2 = new Label("Yellow Label", Label.CENTER);
label2.setBackground(Color.YELLOW);
Label label3 = new Label("Gray Label", Label.CENTER);
label3.setBackground(Color.GRAY);
Panel panel = new Panel(new FlowLayout());
panel.add(label1);
panel.add(label2);
panel.add(label3);
Panel emptyPanel = new Panel();
panel.add(emptyPanel);
add(panel);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
setTitle("NJj's Label Frame");
setSize(400, 300);
}
}
总结
第一种方法:
实现 WindowListener 接口需要实现所有的窗口事件监听器方法,
包括窗口打开、关闭、激活、失活、最小化、最大化等。
这样做的好处是可以对每个窗口事件进行特定的处理,而不是都使用默认的处理方式。
第二种方法:
而继承 WindowAdapter 适配器类只需要重写需要的方法,
其它方法都有默认的空实现,不需要全部实现。
这种方式实现窗口关闭时可以只重写 windowClosing 方法即可,
简化了代码,也不会影响其它窗口事件的处理。
So:
因此,通过实现 WindowListener 接口可以更加灵活地控制窗口事件的处理,
而通过继承 WindowAdapter 适配器类可以简化代码,
实现方式取决于具体的需求和使用场景。