在AWT中绘图

         在Component类里提供了三个和绘图有关的方法:

(1)paint(Graphics g):绘制组件的外观。

(2)update(Graphics g):调用paint方法,刷新组件外观。

(3)repaint():调用update方法,刷新组件外观。

上面三个方法的调用关系为:repaint方法调用update方法;update方法调用paint方法。

 Container类中的update方法先以组件的背景色填充整个组件区域,然后调用paint方法重画组件。Container类的update方法代码如下:

 
   

public void update(Graphics g)

{

if(isShowing())

{

if(!(peer instanceof LightweightPeer))

{

g.ClearRect(0,0,width,height);

}

paint(g);

}

}

普通组件的update方法则直接调用paint方法。
 
   
 
   

public void update(Graphics g)

{

paint(g);

}

paint和update方法通常用于被重写。通常情况下,程序通过重写paint方法实现在AWT组件上绘图。
    重写update或paint方法时,该方法里包含了一个Graphics类型的参数,通过该Graphics参数就可以实现绘图功能。Graphics是一个抽象的画笔对象,Graphics可以在组件上绘制非富多彩的几何图形和位图Graphics类提供了如下几个方法用于绘制几何图形和位图:
 
 
   

drawLine:绘制直线。

drawString:绘制字符串。

drawRect:绘制矩形。

drawRoundRect:绘制圆角矩形。

drawOval:绘制椭圆形状。

drawPolygon:绘制多边形边框。

drawArc:绘制一段圆弧。

drawPolyline:绘制折线。

fillRect:填充一个矩形区域。

fillRoundRect:填充一个圆角矩形。 等等方法

 下面的程序示范了一个简单的绘图程序:
 
   

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
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();
   }
  });

  p.add(rect);
  p.add(oval);
  drawArea.setPreferredSize(new Dimension(250,150));
  f.add(drawArea);
  f.add(p,BorderLayout.SOUTH);
  f.pack();
  f.setVisible(true);
 }
 public static void main(String[] args)
 {
  new SimpleDraw().init();
  System.out.println("Hello World!");
 }
 class MyCanvas extends Canvas
 {
  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),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),50,40);
   }
  }
 }
}

 
   

上面程序窗口中定义了两个按钮,当用户单击任意一个按钮时,程序调用了drawArea对象的repaint方法,该方法导致画布重绘(即调用drawArea对象的update方法,该方法将再调用paint方法)。

你可能感兴趣的:(java学习日志)