大神帮我帮我看看为什么关闭窗口监控器不能调用
package drow;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
public class DrowDemo {
private final String RECT_SHAPE = "rect";
private final String OVAL_SHAPE = "oval";
private Frame f = new Frame("画图窗口");
private Button rect = new Button("绘制矩形");
private Button oval = new Button("绘制圆形");
private String shape = "";
private MyCanvas canvas = new MyCanvas();
public void init() {
Panel p = new Panel();
rect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
shape = RECT_SHAPE;
canvas.repaint();
}
});
oval.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
shape = OVAL_SHAPE;
canvas.repaint();
}
});
p.add(rect);
p.add(oval);
canvas.setPreferredSize(new Dimension(250, 180));
f.addWindowListener(new WindowAdapter() {
/*
* (non-Javadoc)
*
* @see
* java.awt.event.WindowAdapter#windowClosed(java.awt.event.WindowEvent
* )
*/
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("close...");
System.exit(0);
}
});
f.add(canvas);
f.add(p, BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new DrowDemo().init();
}
class MyCanvas extends Canvas {
/*
* (non-Javadoc)
*
* @see java.awt.Canvas#paint(java.awt.Graphics)
*/
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
Random ran = new Random();
if (shape.equals(RECT_SHAPE)) {
g.setColor(new Color(150, 100, 80));
g.drawRect(ran.nextInt(200), ran.nextInt(120), 60, 60);
}
if (shape.equals(OVAL_SHAPE)) {
g.setColor(new Color(89, 140, 210));
g.fillOval(ran.nextInt(250), ran.nextInt(180), 70, 45);
}
}
}
}