Java AWT绘图

来源:互联网 发布:c语言中指针的作用 编辑:程序博客网 时间:2024/05/15 12:15

画图的实现原理

在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);}
Graphics类

Graphics类是一个抽象的画笔对象,Graphics可以在组件上绘制丰富多彩的几何图形和位图

Graphics类提供以下几个方法用于绘制几何图形和位图:

(1)drawLine():绘制直线

(2)drawString():绘制字符串

(3)drawRect():绘制矩形

(4)drawRoundRect():绘制圆角矩形

(5)drawOval():绘制椭圆形状

(6)drawPolygon():绘制多边形边框

(7)drawArc():绘制一段圆弧(可能是椭圆的圆弧)

(8)drawPolyline():绘制折线

(9)fillRect():填充一个矩形区域

(10)fillRoundRect():填充一个圆角矩形区域

(11)fillOval():填充椭圆区域

(12)fillPolygon():填充一个多边形区域

(13)fillArc():填充圆弧和圆弧两个端点到中心连线所包围的区域

(14)drawImage():绘制位图

除此之外,Graphics还提供了setColor()setFont()两个方法用于设置画笔的颜色和字体(仅当绘制字符串时有效),其中setColor()方法需要传入一个Color参数,他可以使用RGB、CMYK等方式设置一个颜色;而setFont()方法需要传入一个Font参数,Font参数需要指定字体名、字体样式、字体大小三个属性

package codes11;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 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() {@Overridepublic void actionPerformed(ActionEvent e) {// 设置shape变量为RECT_SHAPEshape = RECT_SHAPE;// 重画Mycanvas对象,即调用它的update()方法drawArea.repaint();}});oval.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {shape = OVAL_SHAPE;drawArea.repaint();}});f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});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(100), 40, 60);}if (shape.equals(OVAL_SHAPE)) {g.setColor(new Color(80, 100, 200));// 随机填充一个实心圆形g.fillOval(rand.nextInt(200), rand.nextInt(120), 50, 40);}}}public static void main(String[] args) {new SimpleDraw().init();}}


0 0
原创粉丝点击