import java.awt.*;
import java.awt.event.*;
class AwtH extends Frame {
    public static void main(String[] arg) {
        new AwtH();
    }
    Color color = Color.red;
    AwtH() {
        addWindowListener(
            new WindowAdapter() {
                public void windowClosing(WindowEvent event) {
                    System.exit(0);
                }
            }
        );
        setVisible(true);
        final Canvas c = 
            new Canvas() {
                {
                    setSize(300, 300);
                }
                public void paint(Graphics g) {
                    g.setColor(color);
                    g.fillRect(0, 0, 300, 300); 
                }
            }
        ;
        add("North", c);
        Button b = new Button("Change Color");
        add("South", b);
        b.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    if (color == Color.red) {
                        color = Color.blue;
                    } else if (color == Color.blue) {
                        color = Color.green;
                    } else if (color == Color.green) {
                        color = Color.red;
                    }
                    c.repaint();
                }
            }
        );
        pack();
    }
}

// repaint會產生一個event到event queue，然後就回來執行下一行
// paint() 相當於是 repaint event 的 Listener 的動作
// g 是系統底層為這一次的 repaint event 「新」產生的 Graphics

// color要改變所以不能再當final local variable了

// anonymous class can have initializers 
// but cannot have a constructor

