1.画图实现原理
Component类中提供了三个与绘图有关的三个方法。
paint(Graphics g):绘制组件的外观。
update(Graphics g):调用paint方法,刷新组件外观
repaint():调用update方法,刷新组件外观。
调用关系:repaint()调用update()方法;update调用paint()方法。
(1)程序不主动调用paint和update方法,如需重新绘制该组件直接调用repaint()方法即可。
(2)而paint()方法和update()方法通常被重写。
(3)一般地。程序通过重写paint方法在AWT组件上绘图。
Graphics类带有的绘制图方法。
drawLine(): //绘制直线
drawString(): //绘制字符串
drawRect(): //绘制矩形
drawRoundRect(): //绘制圆角矩形
drawOval(): //绘制椭圆形状
drawPolygon(): //绘制多边形边框
drawArc(): //绘制一段圆弧
drawPolyline(): //绘制折线
fillRect(): //填充矩形区域
fillRoundRect(): //填充圆角矩形区域
fillOval(): //填充多边形区域
fillPolygon(): //填充一个多边形区域
fillArc(): //填充圆弧和圆弧两个端点到中心连线所包围的区域
drawImage(): //绘制位图
代码实例:
点击按钮 生成对应矩形或椭圆
package Example.jerry.pratice;
import java.awt.*;
import java.util.Random;
public class GUIStudy {
private final String RECT_SHAPE="rect";
private final String OVAL_SHAPE="oval";
private Frame f=new Frame("Simple Grapj");
private Button rect=new Button("rect");
private Button oval=new Button("oval");
private String shape="";
private Mycanvas drawArea=new Mycanvas();
public void init(){
Panel p=new Panel();
rect.addActionListener(e -> {
shape=RECT_SHAPE;
drawArea.repaint();
});
oval.addActionListener(e -> {
shape=OVAL_SHAPE;
drawArea.repaint();
});
p.add(rect);
p.add(oval);
drawArea.setPreferredSize(new Dimension(250,180));
f.add(drawArea);
f.add(p,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
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),rand.nextInt(120),40,60);
}
if(shape.equals(OVAL_SHAPE)){
g.setColor(new Color(80,100,200));
g.drawOval(rand.nextInt(200),rand.nextInt(120),50,40);
}
}
}
public static void main(String[] args) {
new GUIStudy().init();
}
}
运行结果: