import java.awt.*;
import java.awt.event.*;
class AwtB {
    public static void main(String[] arg) {
        Frame win = new Frame();
        win.addWindowListener(new WindowListenerB());
        win.setVisible(true);
        System.out.println(WindowListenerB.threadName()
                           + ": I am dying.");
    }
}
class WindowListenerB implements WindowListener {
    public void windowActivated(WindowEvent e) {
        System.out.println(threadName() + ": Activated");
    }
    public void windowDeactivated(WindowEvent e) {
        System.out.println(threadName() + ": Deactivated");
    }
    public void windowIconified(WindowEvent e) {
        System.out.println(threadName() + ": Iconified");
    }
    public void windowDeiconified(WindowEvent e) {
        System.out.println(threadName() + ": Deiconified");
    }
    public void windowOpened(WindowEvent e) {
        System.out.println(threadName() + ": Opened");
    }
    public void windowClosed(WindowEvent e) {
        System.out.println(threadName() + ": Closed");
    }
    public void windowClosing(WindowEvent e) {
        System.out.println(threadName() + ": Closing");
    }
    public static String threadName() {
        return Thread.currentThread().getName();	
    }
}

// java.lang.Object
//     java.util.EventObject
//         java.awt.AwtEvent
//             java.awt.event.xxxEvent
// java.util.EventListener (interface)
//     java.awt.event.xxxListener (interface)
// java.lang.Object
//     java.awt.event.xxxAdaptor (implements xxxListener)

// interface WindowListener 宣告了 7 個 methods

// 有些 event 系統底層已做反應且不讓程式設計者加入額外反應，如「最大化」
// 有些 event 系統底層沒有完全反應，程式設計者需加入額外反應，如「關閉」
// 有些 event 系統底層已做反應還讓程式設計者加入額外反應，如「最小化」

// Window 物件有一 instance variable 叫 windowListener
// WindowEvent 物件有一 instance variable 叫 source，宣告在 EventObject

// AWT_EventQueue-0
//   拿到一個 Event 後
//   查它的 source，知道是 Window 物件
//   找它的 windowListener，執行適當的 method 處理此一 Event

