/* * 新建一个窗体Frame * 新建两个按钮,添加进窗体,使用默认的边界布局 * 为按钮添加监听机制,通过按钮设置shape变量,并调用画布的repaint方法 * 新建一个画布类继承Canvas,重写paint方法,根据不同的shape值,使用方法在画布绘制图形 * 将画布添加进窗体默认中间布局 */ public class SimpleDraw { 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 MyCanvas drawArea = new MyCanvas(); // 用于保存需要绘制什么图形的变量 private String shape = ""; public void init() { Panel p = new Panel(); rect.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 设置shape变量为RECT_SHAPE shape = RECT_SHAPE; // 重画MyCanvas对象,即调用它的update方法 drawArea.repaint(); } }); oval.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 设置shape变量为OVAL_SHAPE shape = OVAL_SHAPE; // 重画MyCanvas对象,即调用它的update方法 drawArea.repaint(); } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { System.exit(1); } }); p.add(rect); p.add(oval); drawArea.setPreferredSize(new Dimension(250 , 180));//设置大小 f.add(drawArea); f.add(p , BorderLayout.NORTH); f.pack(); f.setVisible(true); } public static void main(String[] args) { new SimpleDraw().init(); } class MyCanvas extends Canvas { // 重写Canvas的paint方法,实现绘画 public void paint(Graphics g) { Random rand = new Random(); if (shape.equals(RECT_SHAPE)) { // 设置画笔颜色 g.setColor(new Color(220, 100, 80)); // 随机地绘制一个矩形框 g.drawRect( rand.nextInt(200) //---随机数介于0~200之间,不包括200 , rand.nextInt(120) , 40 , 60); } if (shape.equals(OVAL_SHAPE)) { // 设置画笔颜色 g.setColor(new Color(80, 100, 200)); // 随机地填充一个实心圆形 g.fillOval( rand.nextInt(200) , rand.nextInt(120) , 40 , 40); } } } }