前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java AWT 图形界面编程】Canvas 组件中使用 Graphics 绘图 ② ( AWT 绘图步骤 | Graphics 绘图常用 API )

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

作者头像
韩曙亮
发布2023-03-30 18:47:22
9870
发布2023-03-30 18:47:22
举报

文章目录

一、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);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、AWT 绘图步骤
  • 二、Graphics 绘图常用 API
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档