在Component类里提供了和绘图有关的三个方法:
(1)paint(Graphics g):绘制组件的外观。
(2)update(Graphics g):调用paint()方法,刷新组件外观。
(3)repaint():调用update()方法,刷新组件外观。
使用Graphics类:
Graphics是一个抽象的画笔对象,Graphics可以在组件上绘制丰富多彩的几何图形和位图。Graphics提供了如下方法用于绘制几何图形和位图:
drawLine():绘制直线。
drawString():绘制字符串。
drawRect():绘制矩形。
drawRoundRect():绘制圆角矩形。
drawOval():绘制椭圆形。
drawPolygon():绘制多边形边框。
drawArc():绘制一段圆弧(可能是椭圆的圆弧)。
drawPolyline():绘制折线。
fillRect():填充一个矩形区域。
fillRoundRect():填充一个圆角矩形区域。
fillOval():填充椭圆形区域。
fillPolygon():填充一个多边形区域。
fillArc():填充圆弧和圆弧两个端点到中心连线所包围的区域。
drawImage():绘制位图。
setColor():设置画笔颜色,传入一个Color参数,可以使用RGB,CMYK设置一个颜色。
setFont():设置画笔字体(仅当绘制字符串时有效),Font参数需要指定字体名,字体样式,字体大小三个属性。
AWT专门提供了一个Canvas类作为绘图的画布,程序可以通过创建Canvas的子类,并重写它的paint()方法来实现绘图。
package javaAWT;
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 SimpleDraw {
private final String RECT_SHAPE = "rect";
private final String OVAL_SHAPE = "oval";
private Frame frame = new Frame("Draw");
private Button btnRect = new Button("Rect");
private Button btnOval = new Button("Oval");
private MyCanvas drawArea = new MyCanvas();
// 用于保存需要绘制的图形变量
private String shape = "";
public void init() {
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
super.windowClosing(e);
System.exit(0);
}
});
Panel panel = new Panel();
btnRect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
shape = RECT_SHAPE;
drawArea.repaint();
}
});
btnOval.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
shape = OVAL_SHAPE;
drawArea.repaint();
}
});
panel.add(btnRect);
panel.add(btnOval);
drawArea.setPreferredSize(new Dimension(250, 180));
frame.add(drawArea);
frame.add(panel, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
class MyCanvas extends Canvas {
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
Random random = new Random();
if (shape.equals(RECT_SHAPE)) {
g.setColor(new Color(220, 100, 80));
g.drawRect(random.nextInt(200), random.nextInt(120), 40, 60);
}
if (shape.equals(OVAL_SHAPE)) {
g.setColor(new Color(80, 90, 200));
g.drawOval(random.nextInt(200), random.nextInt(120), 50, 40);
}
}
}
public static void main(String[] args) {
new SimpleDraw().init();
}
}