【Java AWT 图形界面编程】Canvas 组件中使用 Graphics 绘图 ② ( AWT 绘图步骤 | Graphics 绘图常用 API )

时间:2023-01-23 07:56:38


文章目录

  • ​​一、AWT 绘图步骤​​
  • ​​二、Graphics 绘图常用 API​​






一、AWT 绘图步骤



在 AWT 绘图中 , Canvas 是绘图所在的画布 , Graphics 是绘图使用的画笔 ;



AWT 绘图步骤如下 :

首先 , 自定义 Canvas 组件类 , 重写其中的 Component#paint(Graphics g) 函数 , Component 组件 与 Graphics 是由 paint(Graphics g) 函数 进行关联的 ;

然后 , 在自定义的 Canvas 组件 重写的 Component#paint(Graphics g) 函数中 , 先调用 Graphics 实例对象的 setColor , setFont 等函数 , 设置画笔的相关属性 ;

最后 , 调用 Graphics 实例对象的 drawXxx 函数开始绘图 ;






二、Graphics 绘图常用 API



Graphics 绘图常用 API :

  • void setColor(Color c) : 设置画笔颜色 ;
/**
* 将此图形上下文的当前颜色设置为指定的颜色。
* 使用此图形上下文的所有后续图形操作都使用此指定颜色。
* @param c 新的渲染颜色。
* @see java.awt.Color
* @see java.awt.Graphics#getColor
*/
public abstract void setColor(Color c);
  • void setFont(Font font) : 设置画笔绘制文字的字体 ;
/**
* 将此图形上下文的字体设置为指定的字体。
* 使用此图形上下文的所有后续文本操作都使用此字体。
* 空参数将被无声地忽略。
* @param font 字体.
* @see java.awt.Graphics#getFont
* @see java.awt.Graphics#drawString(java.lang.String, int, int)
* @see java.awt.Graphics#drawBytes(byte[], int, int, int, int)
* @see java.awt.Graphics#drawChars(char[], int, int, int, int)
*/
public abstract void setFont(Font font);
  • void drawLine(int x1, int y1, int x2, int y2) : 绘制线段 ;
/**
* 在这个图形上下文的坐标系统中的点(x1, y1)和点(x2, y2)之间绘制一条线,使用当前颜色。
* @param x1 第一个点的x坐标。
* @param y1 第一个点的y坐标。
* @param x2 第二个点的x坐标。
* @param y2 第二点的y坐标。
*/
public abstract void drawLine(int x1, int y1, int x2, int y2);
  • void drawRect(int x, int y, int width, int height) : 绘制矩形 ;
/**
* 绘制指定矩形的轮廓。
* 矩形的左右边的宽度分别为x和x。
* 上下边的高度分别为y和y。
* 矩形使用图形上下文的当前颜色绘制。
* @param x x坐标
* 要画的矩形的。
* @param y y坐标
* 要画的矩形的。
* @param width 要绘制的矩形的宽度。
* @param height 要绘制的矩形的高度。
* @see java.awt.Graphics#fillRect
* @see java.awt.Graphics#clearRect
*/
public void drawRect(int x, int y, int width, int height) {
if ((width < 0) || (height < 0)) {
return;
}

if (height == 0 || width == 0) {
drawLine(x, y, x + width, y + height);
} else {
drawLine(x, y, x + width - 1, y);
drawLine(x + width, y, x + width, y + height - 1);
drawLine(x + width, y + height, x + 1, y + height);
drawLine(x, y + height, x, y + 1);
}
}
  • void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) : 绘制圆角矩形 ;
/**
* 使用此图形上下文的当前颜色绘制轮廓的圆角矩形。
* 矩形的左右边分别为x和x+width。
* 矩形的上边和下边高度分别为y和y。
* @param x 待绘制矩形的x坐标。
* @param y 待画矩形的y坐标。
* @param width 要绘制的矩形的宽度。
* @param height 要绘制的矩形的高度。
* @param arcWidth 四个角的水平圆弧直径。
* @param arcHeight 圆弧四个角的垂直直径。
* @see java.awt.Graphics#fillRoundRect
*/
public abstract void drawRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight);
  • void drawOval(int x, int y, int width, int height) : 绘制椭圆 ;
/**
* 绘制椭圆的轮廓。
* 结果是一个圆或椭圆,适合
* 由<code>x</code>, <code>y</code>,
* <code>width</code>和<code>height</code>参数。
* < p >
* 椭圆所覆盖的区域是
* 1</code>像素宽
* And <code>height+1</code> pixels tall。
* @param X左上方的<i> X </i>坐标
* 要画的椭圆角。
* @param Y,左上方的<i> Y </i>坐标
* 要画的椭圆角。
* @param 宽度要绘制的椭圆的宽度。
* @param 高度要绘制的椭圆的高度。
* @see java.awt.Graphics#fillOval
*/
public abstract void drawOval(int x, int y, int width, int height);
  • void drawPolygon(int xPoints[], int yPoints[], int nPoints) : 绘制多边形 ;
/**
* 绘制由x和y坐标数组定义的闭合多边形。
* 每一对(x,y)坐标定义一个点。
* 该方法为1;i;nPoints绘制由nPoint线段定义的多边形,
* 其中第一个nPoint-1线段是从(xPoints[i-1],yPoints[i-1])
* 到(xPoints[i],yPoints[i])的线段。
*
* 如果最后一个点和第一个点不同,则画一条线将这两个点连接起来,从而自动关闭图形。
* @param xPoints A是x坐标的数组。
* @param yPoints A是y坐标的数组。
* @param nPoints A是总分。
* @see java.awt.Graphics#fillPolygon
* @see java.awt.Graphics#drawPolyline
*/
public abstract void drawPolygon(int xPoints[], int yPoints[],
int nPoints);
  • void fillRect(int x, int y, int width, int height) : 填充矩形区域 ;
/**
* 填充指定的矩形。
* 矩形的左右边在
* X和X +width-1。
* 顶部和底部边缘在
* Y和Y +高-1。
* 生成的矩形覆盖了一个区域
* 宽度像素宽
* 高度像素高。
* 矩形使用图形上下文的当前颜色填充。
* @param x x坐标 要填充的矩形。
* @param y y坐标 要填充的矩形。
* @param width 要填充的矩形的宽度。
* @param height 要填充的矩形的高度。
* @see java.awt.Graphics#clearRect
* @see java.awt.Graphics#drawRect
*/
public abstract void fillRect(int x, int y, int width, int height);
  • fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) : 填充圆角矩形区域 ;
/**
* Fills the specified rounded corner rectangle with the current color.
* The left and right edges of the rectangle
* are at x and x+width-1,
* respectively. The top and bottom edges of the rectangle are at
* y and y+height-1.
* @param x 待填充矩形的x坐标。
* @param y 待填充矩形的y坐标。
* @param width 要填充的矩形的宽度。
* @param height 要填充的矩形的高度。
* @param arcWidth 四个角的水平圆弧直径。
* @param arcHeight 圆弧四个角的垂直直径。
* @see java.awt.Graphics#drawRoundRect
*/
public abstract void fillRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight);
  • void fillOval(int x, int y, int width, int height) : 填充椭圆区域 ;
/**
* 用当前颜色填充以指定矩形为界的椭圆。
* @param x 要填充的椭圆的左上角的x坐标。
* @param y 要填充的椭圆的左上角的y坐标。
* @param width 要填充的椭圆的宽度。
* @param height 要填充的椭圆的高度。
* @see java.awt.Graphics#drawOval
*/
public abstract void fillOval(int x, int y, int width, int height);
  • void fillPolygon(int xPoints[], int yPoints[], int nPoints) : 填充多边形 ;
/**
* 填充由x和y坐标数组定义的闭合多边形。
* 该方法绘制由nPoint线段定义的多边形,
* 其中前nPoint-1线段是从(xPoints[i-1],yPoints[i-1])
* 到(xPoints[i],yPoints[i])的线段。
*
* 通过画一条连接线,图形自动关闭
* 最后一点和第一点,如果这两点不一样的话。
* 多边形内的区域使用偶数-奇数填充规则定义,也称为交替规则。
* @param xPoints A是x坐标的数组。
* @param yPoints A是y坐标的数组。
* @param nPoints A是总分。
* @see java.awt.Graphics#drawPolygon(int[], int[], int)
*/
public abstract void fillPolygon(int xPoints[], int yPoints[],
int nPoints);
  • void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) : 填充 扇形区域 ;
/**
* 填充覆盖指定矩形的圆形或椭圆弧。
*
* 所产生的弧开始于startAngle,并扩展为arcAngle度。
* 角度的解释是0度在3点钟位置。
* 正值表示逆时针旋转,负值表示顺时针旋转。
* 圆弧的中心是原点为(x,y)的矩形的中心,其大小由width和height参数指定。
* 生成的弧覆盖的区域宽度+1像素宽,高度+1像素高。
* 角度是相对于边界矩形的非正方形范围指定的,
* 这样45度总是落在从椭圆中心到边界矩形右上角的直线上。
*
* 因此,如果边界矩形在一个轴上明显比另一个轴长,
* 则到弧段开始和结束的角度将沿着边界的较长轴倾斜得更远。
*
* @param x 要填充的圆弧左上角的x坐标。
* @param y 要填充的圆弧左上角的y坐标。
* @param width 要填充的弧的宽度。
* @param height 要填充的弧的高度。
* @param startAngle 起始角。
* @param arcAngle 弧的角度范围,相对于起始角。
* @see java.awt.Graphics#drawArc
*/
public abstract void fillArc(int x, int y, int width, int height,
int startAngle, int arcAngle);
  • boolean drawImage(Image img, int x, int y, ImageObserver observer) : 绘制位图 ;
/**
* 绘制当前可用的尽可能多的指定图像。
* 在此图形上下文的坐标空间中,图像的左上角位于(x,y)处。
* 图像中的透明像素不会影响已经存在的像素。
*
* 这个方法在所有情况下都立即返回,即使完整的图像还没有加载,
* 并且它没有被抖动和转换为当前的输出设备。
*
* 如果图像已经完全加载,并且它的像素不再被改变,那么drawImage返回true。
* 否则,drawImage返回false,当更多的图像可用或是时候绘制另一帧动画时,
* 加载图像的进程通知指定的图像观察者。
* @see java.awt.Image
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
*/
public abstract boolean drawImage(Image img, int x, int y,
ImageObserver observer);