Graphics
来源:互联网 发布:淘宝hd 5.0.1 编辑:程序博客网 时间:2024/05/16 11:54
Graphics是Java绘图的核心类,它可以支持两种绘图:一种是基本的绘图,如画线、矩形、圆等;另一种是画图像,主要用于动画制作。
要进行绘图,首先要找到一个Graphics类的对象。Graphics类是抽象类,没有办法直接生成一个对象来使用,而且它也没有提供任何static方法可供直接调用,那么到底应该如何使用Graphics类呢?update()方法和paint()方法就是其中的一个答案。update()方法和paint()方法所传递的参数就是Graphics类的对象。因此,在绘图的时候,就可以通过重载这两个方法,使用参数对象的绘图方法来进行绘图,这是在动画程序中经常使用的方法。另外,还可以通过getGraphics()方法得到一个Graphics类的对象,这个对象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。getGraphics()方法有两个来源,一个是继承自Componet类,同时,Image类也提供了getGraphics()方法。得到Graphics类的对象之后,就可使用各种Graphics类的对象的绘图方法。
(1)与绘图操作相关的3个方法分别如下。
public void paint(Graphics g);
paint()方法进行绘图的具体操作,程序员可对此进行重写。
public void update(Graphics g);
update()方法用于更新图形,先清除背景和前景,再调用paint()。
public void repaint();
repaint()方法用于重绘图形,在组件外形发生变化,即大小改变或位置移动时,repaint( )方法立即被系统自动调用,而实际上repaint()方法是自动调用update()方法。
这3个方法在java.awt.Component类中定义。可以参见13.4.1小节中Component类的方法介绍的部分。
(2)Graphics提供的基本的图形绘制方法。Graphics拥有的绘图方法,除了矩形和椭圆形以外,还有多边形、填充图形和三维矩形等。所有方法都是void类型的。
void drawLine(int x1,int y1,int x2,int y2);
drawLine()可绘制直线。参数分别为起点坐标和终点坐标。
void drawArc(int x,int y,int width,int helght,int startAngle,int arcAngle);
drawArc()可绘制弧线。参数分别为左角坐标、宽、高、起始角和终止角。
void drawPolyline(int xPoints[],int yPoints[],int nPoints);
drawPolyline()可绘制折线。参数分别为各点的x坐标、y坐标和折线数。
void drawPloygon(int xPoints[],int yPoints[],int nPoints);
void drawPolygon(Polygon polygon);
以上两个方法提供绘制多边形的功能。
第1个方法的参数分别为各点的x坐标、y坐标和边数。
第2个方法的参数为已定义的多边形对象。
void drawRect(int x,int y,int width,int height);
void drawRoundRect(int x,int y,int width,int height,int arcWidth,intarcHeight);
void fill3DRect(int x,int y,int width,int height,boolean raised);
以上3个方法提供绘制矩形的功能。
第1个方法绘制矩形,参数分别为左角坐标、宽和高。
第2个方法绘制圆角矩形,参数分别为左角坐标、宽、高、弧度和深度。
第3个方法绘制3D矩形,参数分别为左角坐标、宽、高和true。
void drawOval(int x,int y,int width,int height);
drawOval()可绘制椭圆。参数分别为中心坐标、长轴和短轴。
如果要画填充图形,则只需把以上的这几种方法中的draw改为fill即可,参数表是一样的,颜色则可由g.setColor()设定。注意fillRect()可以用来画一根粗实线。
void drawBytes(byte date[],int offset,int length,int x,int y);
void drawChars(char date[],int offset,int length,int x,int y);
void drawString(String str,int x,int y);
以上3个方法提供输出文字的功能。
第1个方法输出字节数组,参数分别为字节数组、字节数组起始位置、x坐标和y坐标。
第2个方法输出字符数组,参数分别为字符数组、字符数组起始位置、x坐标和y坐标。
第3个方法输出字符串,参数分别为字符串、x坐标和y坐标。
下面举个例子来说明,此例在Applet中绘制了弧形、多角形和三维矩形,如代码15-8所示。
【代码15-8】 绘图示例
AppletUse.java文件如下。
import java.awt.*;
import java.Applet.*;
public class AppletUse extends Applet {
private int cx;
private int cy;
public void init() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
cx = d.width/2 ; cy = d.height/2;
}
//覆盖paint()方法
public void paint(Graphics g) {
//画填充弧形、椭圆形、矩形,多边形,3D矩形
g.setColor(Color.green);
g.fillArc(10, 10, 60, 40, 30, 60);
g.fillOval(10, 60, 60, 40);
g.fillRect(80, 10, 60, 40);
Polygon p = new Polygon();
p.addPoint(150, 10);
p.addPoint(210, 10);
p.addPoint(260, 50);
p.addPoint(220, 50);
p.addPoint(190, 70);
g.fillPolygon(p);
//画弧形和多边形
g.setColor(Color.red);
g.drawArc(80, 90, 100, 150, 270, 90);
int xPoint[]={100,150,170};
int yPoint[]={150,200,170};
g.drawPolygon(xPoint, yPoint, 3);
//绘制高度为5个像素,视角为45°正方向的3维矩形
g.setColor(Color.yellow);
g.fill3DRect(100, 300, 60, 40, true);
for (int i=1; i<=5; i++)
g.draw3DRect(100 + i, 300 - i, 60, 40, true);
//绘制高度为5个像素,视角为135°正方向的3维矩形
g.fill3DRect(100, 360, 60, 40, true);
for (int i=1; i<=5; i++)
g.draw3DRect(100 - i, 360 + i, 60, 40, true);
}
}
AppletUse.html文件如下。
<HTML>
<TITLE>Applet Use</TITLE>
<APPLET CODE="AppletUse.class" WIDTH=300 HEIGHT=450>
</APPLET>
</HTML>
要进行绘图,首先要找到一个Graphics类的对象。Graphics类是抽象类,没有办法直接生成一个对象来使用,而且它也没有提供任何static方法可供直接调用,那么到底应该如何使用Graphics类呢?update()方法和paint()方法就是其中的一个答案。update()方法和paint()方法所传递的参数就是Graphics类的对象。因此,在绘图的时候,就可以通过重载这两个方法,使用参数对象的绘图方法来进行绘图,这是在动画程序中经常使用的方法。另外,还可以通过getGraphics()方法得到一个Graphics类的对象,这个对象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。getGraphics()方法有两个来源,一个是继承自Componet类,同时,Image类也提供了getGraphics()方法。得到Graphics类的对象之后,就可使用各种Graphics类的对象的绘图方法。
(1)与绘图操作相关的3个方法分别如下。
public void paint(Graphics g);
paint()方法进行绘图的具体操作,程序员可对此进行重写。
public void update(Graphics g);
update()方法用于更新图形,先清除背景和前景,再调用paint()。
public void repaint();
repaint()方法用于重绘图形,在组件外形发生变化,即大小改变或位置移动时,repaint( )方法立即被系统自动调用,而实际上repaint()方法是自动调用update()方法。
这3个方法在java.awt.Component类中定义。可以参见13.4.1小节中Component类的方法介绍的部分。
(2)Graphics提供的基本的图形绘制方法。Graphics拥有的绘图方法,除了矩形和椭圆形以外,还有多边形、填充图形和三维矩形等。所有方法都是void类型的。
void drawLine(int x1,int y1,int x2,int y2);
drawLine()可绘制直线。参数分别为起点坐标和终点坐标。
void drawArc(int x,int y,int width,int helght,int startAngle,int arcAngle);
drawArc()可绘制弧线。参数分别为左角坐标、宽、高、起始角和终止角。
void drawPolyline(int xPoints[],int yPoints[],int nPoints);
drawPolyline()可绘制折线。参数分别为各点的x坐标、y坐标和折线数。
void drawPloygon(int xPoints[],int yPoints[],int nPoints);
void drawPolygon(Polygon polygon);
以上两个方法提供绘制多边形的功能。
第1个方法的参数分别为各点的x坐标、y坐标和边数。
第2个方法的参数为已定义的多边形对象。
void drawRect(int x,int y,int width,int height);
void drawRoundRect(int x,int y,int width,int height,int arcWidth,intarcHeight);
void fill3DRect(int x,int y,int width,int height,boolean raised);
以上3个方法提供绘制矩形的功能。
第1个方法绘制矩形,参数分别为左角坐标、宽和高。
第2个方法绘制圆角矩形,参数分别为左角坐标、宽、高、弧度和深度。
第3个方法绘制3D矩形,参数分别为左角坐标、宽、高和true。
void drawOval(int x,int y,int width,int height);
drawOval()可绘制椭圆。参数分别为中心坐标、长轴和短轴。
如果要画填充图形,则只需把以上的这几种方法中的draw改为fill即可,参数表是一样的,颜色则可由g.setColor()设定。注意fillRect()可以用来画一根粗实线。
void drawBytes(byte date[],int offset,int length,int x,int y);
void drawChars(char date[],int offset,int length,int x,int y);
void drawString(String str,int x,int y);
以上3个方法提供输出文字的功能。
第1个方法输出字节数组,参数分别为字节数组、字节数组起始位置、x坐标和y坐标。
第2个方法输出字符数组,参数分别为字符数组、字符数组起始位置、x坐标和y坐标。
第3个方法输出字符串,参数分别为字符串、x坐标和y坐标。
下面举个例子来说明,此例在Applet中绘制了弧形、多角形和三维矩形,如代码15-8所示。
【代码15-8】 绘图示例
AppletUse.java文件如下。
import java.awt.*;
import java.Applet.*;
public class AppletUse extends Applet {
private int cx;
private int cy;
public void init() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
cx = d.width/2 ; cy = d.height/2;
}
//覆盖paint()方法
public void paint(Graphics g) {
//画填充弧形、椭圆形、矩形,多边形,3D矩形
g.setColor(Color.green);
g.fillArc(10, 10, 60, 40, 30, 60);
g.fillOval(10, 60, 60, 40);
g.fillRect(80, 10, 60, 40);
Polygon p = new Polygon();
p.addPoint(150, 10);
p.addPoint(210, 10);
p.addPoint(260, 50);
p.addPoint(220, 50);
p.addPoint(190, 70);
g.fillPolygon(p);
//画弧形和多边形
g.setColor(Color.red);
g.drawArc(80, 90, 100, 150, 270, 90);
int xPoint[]={100,150,170};
int yPoint[]={150,200,170};
g.drawPolygon(xPoint, yPoint, 3);
//绘制高度为5个像素,视角为45°正方向的3维矩形
g.setColor(Color.yellow);
g.fill3DRect(100, 300, 60, 40, true);
for (int i=1; i<=5; i++)
g.draw3DRect(100 + i, 300 - i, 60, 40, true);
//绘制高度为5个像素,视角为135°正方向的3维矩形
g.fill3DRect(100, 360, 60, 40, true);
for (int i=1; i<=5; i++)
g.draw3DRect(100 - i, 360 + i, 60, 40, true);
}
}
AppletUse.html文件如下。
<HTML>
<TITLE>Applet Use</TITLE>
<APPLET CODE="AppletUse.class" WIDTH=300 HEIGHT=450>
</APPLET>
</HTML>
0 0
- graphics
- Graphics
- Graphics
- Graphics
- graphics
- graphics
- Graphics
- Graphics
- Graphics
- Graphics
- Graphics
- Graphics
- Graphics
- Graphics类
- Graphics Example
- TC&Graphics
- Graphics.MeasureString
- c graphics
- leetcode 记录61-90
- 十六周阅读程序3
- Java中的ThreadLocal的使用--学习笔记
- 重写editText组件以实现记事本的下划线功能
- XTU 1236 Fibonacci
- Graphics
- Jenkins忘记管理员密码
- 系统调用和库函数的区别
- 第14周 项目二(2)
- 2016-6-15《烽火通信科技股份有限公司》笔试题总结
- 剑指offer29--从1到n整数中1出现的个数
- 十六周 文件
- 51nod 1091 线段的重叠
- 第16周阅读程序——4(1)