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

2023-03-30 18:47:22 浏览数 (2)

文章目录

  • 一、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) : 设置画笔颜色 ;
代码语言:javascript复制
    /**
     * 将此图形上下文的当前颜色设置为指定的颜色。
     * 使用此图形上下文的所有后续图形操作都使用此指定颜色。
     * @param     c   新的渲染颜色。
     * @see       java.awt.Color
     * @see       java.awt.Graphics#getColor
     */
    public abstract void setColor(Color c);
  • void setFont(Font font) : 设置画笔绘制文字的字体 ;
代码语言:javascript复制
    /**
     * 将此图形上下文的字体设置为指定的字体。
     * 使用此图形上下文的所有后续文本操作都使用此字体。
     * 空参数将被无声地忽略。
     * @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) : 绘制线段 ;
代码语言:javascript复制
    /**
     * 在这个图形上下文的坐标系统中的点(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) : 绘制矩形 ;
代码语言:javascript复制
    /**
     * 绘制指定矩形的轮廓。
     * 矩形的左右边的宽度分别为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) : 绘制圆角矩形 ;
代码语言:javascript复制
    /**
     * 使用此图形上下文的当前颜色绘制轮廓的圆角矩形。
     * 矩形的左右边分别为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) : 绘制椭圆 ;
代码语言:javascript复制
    /**
     * 绘制椭圆的轮廓。
     * 结果是一个圆或椭圆,适合
     * 由<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) : 绘制多边形 ;
代码语言:javascript复制
    /**
     * 绘制由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) : 填充矩形区域 ;
代码语言:javascript复制
    /**
     * 填充指定的矩形。
     * 矩形的左右边在
     * 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) : 填充圆角矩形区域 ;
代码语言:javascript复制
    /**
     * 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) : 填充椭圆区域 ;
代码语言:javascript复制
    /**
     * 用当前颜色填充以指定矩形为界的椭圆。
     * @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) : 填充多边形 ;
代码语言:javascript复制
    /**
     * 填充由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) : 填充 扇形区域 ;
代码语言:javascript复制
    /**
     * 填充覆盖指定矩形的圆形或椭圆弧。
     * 
     * 所产生的弧开始于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) : 绘制位图 ;
代码语言:javascript复制
    /**
     * 绘制当前可用的尽可能多的指定图像。
     * 在此图形上下文的坐标空间中,图像的左上角位于(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);

0 人点赞