Graphics类提供基本绘图方法,Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形、画字符串等。

1. 画线段:在窗口中画一条线段,可以使用Graphics类的drawLine()方法:

/**
* 在此图形上下文的坐标系中,使用当前颜色在点 (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)

例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,100)处画一个点。

g.drawLine(3,3,50,50); //画一条线段

g.drawLine(100,100,100,100); //画一个点。

2. 画矩形

矩形有两种:普通型和圆角型。

A. 画普通矩形

有如下两个方法画普通矩形:

/**
* 绘制指定矩形的边框。矩形的左边缘和右边缘分别位于 x 和 x + width。
* 上边缘和下边缘分别位于 y 和 y + height。使用图形上下文的当前颜色绘制该矩形。
*/
public void drawRect(int x, int y, int width, int height) /**
* 填充指定的矩形。该矩形左边缘和右边缘分别位于 x 和 x + width - 1。
* 上边缘和下边缘分别位于 y 和 y + height - 1。
* 得到的矩形覆盖 width 像素宽乘以 height 像素高的区域。
* 使用图形上下文的当前颜色填充该矩形。
*/
public abstract void fillRect(int x, int y, int width, int height)

参数x表示要绘制图形的 x 坐标,y 表示要绘制图形的 y 坐标,width 表示图形宽度,height 表示图形高度。

以下代码是画矩形的例子:

g.drawRect(80,100,40,25); // 画矩形线框

g.setColor(Color.yellow);
g.fillRect(20,70,20,30); // 画矩形着色块

B. 画圆角矩形

画圆角矩形也有两个方法:

/**
* 用此图形上下文的当前颜色绘制圆角矩形的边框。
* 矩形的左边缘和右边缘分别位于 x 和 x + width。
* 矩形的上边缘和下边缘分别位于 y 和 y + height。
*/
public abstract void drawRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight) /**
* 用当前颜色填充指定的圆角矩形。
* 矩形的左边缘和右边缘分别位于 x 和 x + width - 1。
* 矩形的上边缘和下边缘分别位于 y 和 y + height - 1。
*/
public abstract void fillRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight)

参数 arcWidth 表示4个角弧度的水平直径,arcHeight 表示4个角弧度的垂直直径。

以下代码是画矩形的例子:

g.drawRoundRect(10,10,150,70,40,25); // 画一个圆角矩形

g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40); // 填充一个圆角矩形块

g.drawRoundRect(10,150,40,40,40,40); // 画圆

g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//画圆块

可以用画圆角矩形方法画圆形,当矩形的宽和高相等,圆角弧的横向直径和圆角弧的纵向直径也相等,并等于矩形的宽和高时,画的就是圆形。参见上述例子中的注释,前一个是画圆,后一个是涂圆块。

C. 画三维矩形

画三维矩形有两个方法:

/**
* 绘制指定矩形的 3-D 高亮显示边框。
* 矩形的边是高亮显示的,以至于从左上角看呈斜面并加亮。
* 高亮显示效果所用的颜色根据当前颜色确定。
* 得到的矩形覆盖width + 1 像素宽乘以 height + 1 像素高的区域。
*/
public void draw3DRect(int x, int y, int width, int height, boolean raised) /**
* 绘制一个用当前颜色填充的 3-D 高亮显示矩形。
* 矩形的边是高亮显示的,以至于从左上角看呈斜面并加亮。
* 高亮显示效果所用的颜色根据当前颜色确定
*/
public void fill3DRect(int x, int y, int width, int height, boolean raised)

参数 raised 表示一个用于确定矩形是凸出平面显示还是凹入平面显示的 boolean 值。

以下代码是画突出矩形的例子:

g.draw3DRect(80,100,40,25,true); // 画一个3D矩形线框

g.setColor(Color.yellow);
g.fill3DRect(20,70,20,30,true); // 画一个3D矩形着色块

3. 画椭圆形

椭圆形由椭圆的横轴和纵轴确定。画椭圆形有两个方法:

/**
* 绘制椭圆的边框。
* 得到一个圆或椭圆,它刚好能放入由 x、y、width 和 height 参数指定的矩形中。
* 椭圆覆盖区域的宽度为 width + 1 像素,高度为 height + 1 像素。
*/
public abstract void drawOval(int x, int y, int width, int height) /**
* 使用当前颜色填充外接指定矩形框的椭圆。
*/
public abstract void fillOval(int x, int y, int width, int height)

也可以用画椭圆形方法画圆形,当横轴和纵轴相等时,所画的椭圆形即为圆形。

以下代码是画椭圆形的例子:

g.drawOval(10,10,60,120); // 画椭圆

g.setColor(Color.cyan);g.fillOval(100,30,60,60); // 填充圆块

g.setColor(Color.magenta);g.fillOval(15,140,100,50); // 填充椭圆

4. 画圆弧

画圆弧有两个方法:

/**
* 绘制一个覆盖指定矩形的圆弧或椭圆弧边框。
*/
public abstract void drawArc(int x, int y, int width, int height,
int startAngle, int arcAngle) /**
* 填充覆盖指定矩形的圆弧或椭圆弧。
*/
public abstract void fillArc(int x, int y, int width, int height,
int startAngle, int arcAngle)

参数 startAngle 表示开始角度,arcAngle 表示相对于开始角度而言弧跨越的角度。

得到的弧从 startAngle 开始跨越 arcAngle 度。对角度的解释如下:0 度角位于 3 点钟位置。正值指示逆时针旋转,负值指示顺时针旋转。

弧的中心是矩形的中心,此矩形的原点为 (x, y),大小由 width 和 height 参数指定。

得到的弧覆盖 width + 1 像素宽乘以 height + 1 像素高的区域。

角度是相对于外接矩形的非正方形区域指定的,45 度角始终落在从椭圆中心到外接矩形右上角的连线上。因此,如果外接矩形在一个轴上远远长于另一个轴,则弧段的起点和结束点的角度将沿边框长轴发生更大的偏斜。

以下代码是画圆弧的例子:

g.drawArc(10,40,90,50,0,180); // 画圆弧线

g.drawArc(100,40,90,50,180,180); // 画圆弧线

g.setColor(Color.yellow);
g.fillArc(10,100,40,40,0,-270); // 填充缺右上角的四分之三的椭圆 g.setColor(Color.green);
g.fillArc(60,110,110,60,-90,-270); // 填充缺左下角的四分之三的椭圆

5. 画多边形

多边形是用多条线段首尾连接而成的封闭平面图。多边形线段端点的x坐标和y坐标分别存储在两个数组中,画多边形就是按给定的坐标点顺序用直线段将它们连起来。以下是画多边形常用的两个方法:

/**
* 绘制一个由 x 和 y 坐标数组定义的闭合多边形。每对 (x, y) 坐标定义一个点。
*/
public abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints); /**
* 填充由 x 和 y 坐标数组定义的闭合多边形。
*/
public abstract void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)

绘制由 nPoint 个线段定义的多边形,其中前 nPoint - 1 个线段是 1 ≤ i ≤ 时从 (xPoints[i - 1], yPoints[i - 1]) 到 (xPoints[i], yPoints[i]) 的线段。如果最后一个点和第一个点不同,则图形会通过在这两点间绘制一条线段来自动闭合。

以下代码是画多边形的例子:

int px1[]={50,90,10,20};//首末点相重,才能画多边形

int py1[]={10,50,50,20};

int px2[]={140,180,170,180,140,100,110,140};

int py2[]={5,25,35,45,65,35,25,5};

g.setColor(Color.blue);

g.fillPolygon(px1,py1,4);

g.setColor(Color.red);

g.drawPolygon(px2,py2,8);

也可以用多边形对象画多边形。用多边形类Polygon创建一个多边形对象,然后用这个对象绘制多边形。Polygon类的主要方法:

Polygon()  // 创建空的多边形。
Polygon(int[] xpoints, int[] ypoints, int npoints) // 根据指定的参数构造并初始化新的 Polygon。 public void addPoint(int x, int y) // 将一个坐标点加入到Polygon对象中。

使用Polygon多边形对象绘制多边形的方法:

public void drawPolygon(Polygon p) // 绘制多边形。

public void fillPolygon(Polygon p) // 填充多边形。

例如,以下代码,画一个三角形和填充一个黄色的三角形。注意,用多边形对象画封闭多边形不要求首末点重合。

Polygon ponlygon1=new Polygon();
polygon1.addPoint(50,10);
polygon1.addPoint(90,50);
polygon1.addPoint(10,50);
g.drawPolygon(polygon1); int x[]={140,180,170,180,140,100,110,100};
int y[]={5,25,35,45,65,45,35,25};
Polygon polygon2 = new Polygon(x,y,8);
g.setColor(Color.yellow);
g.fillPolygon(polygon2);

6. 画字符串

画字符串的常用方法是:

/**
* 使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。
* 最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处。
*/
public abstract void drawString(String str, int x, int y)

以下代码是绘制字符串的例子:

g.setColor(Color.GREEN);
g.setFont(new Font("楷体", Font.BOLD, 20));
g.drawString("使用画笔绘制的字符串内容", 220, 345);

7. 画图像

绘制图像的常用方法:

boolean drawImage(Image img, int x, int y, ImageObserver observer)
boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)
boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)

参数:

Image img – 需要绘制的图像。

int x, int y – 图像左上角坐标。

int width, int height – 图像的宽度和高度。

Color bgcolor – 背景色,即图像下面的颜色。如果图像包含透明象素时这会有用,图像将在指定颜色背景下显示。

ImageObserver observer – 一个实现ImageObserver 接口的对象。它将该对象登记为一个图像观察者,因此当图像的任何新信息可见时它被通知。大多组件可以简单的指定this。

组件可以指定this作为图像观察者的原因是Component 类实现了ImageObserver 接口。当图像数据被加载时它的实现调用repaint方法,这通常是你所期望的。

drawImage 方法只要要显示的图像数据已经加载完就返回。如果你要确保drawImage只绘制完整的图像,那么你需要跟踪图像的加载。

例如,绘制一张图片:

Image img = Toolkit.getDefaultToolkit().getImage("img/monster.gif");
g.drawImage(img, 510, 5, 200, 200, Color.LIGHT_GRAY, this);

8. 擦除矩形块

当需要在一个着色图形的中间有一个空缺的矩形的情况,可用背景色填充一矩形块实现,相当于在该矩形块上使用了 “橡皮擦”。实现的方法是:

/**
* 通过使用当前绘图表面的背景色进行填充来清除指定的矩形。
*/
public abstract void clearRect(int x, int y, int width, int height)

例如,以下代码实现在一个圆中擦除一个矩形块的着色:

g.setColor(Color.blue);
g.fillOval(50,50,100,100);
g.clearRect(70,70,40,55);

9. 限定作图显示区域

用一个矩形表示图形的显示区域,要求图形在指定的范围内有效,不重新计算新的坐标值,自动实现超出部分不显示。实现方法是:

/**
* 限制图形在指定区域内的显示,超出部分不显示。多个限制区有覆盖时,得到限制区域的交集区域。
*/
public abstract void clipRect(int x, int y, int width, int height)

例如,代码:

g.clipRect(0,0,100,50);
g.clipRect(50,25,100,50);

相当于

g.clipRect(50,25,50,25);

10. 复制图形

利用Graphics类的方法copyArea()可以实现图形的复制,其使用格式是:

/**
* dx和dy分别表示将图形粘贴到原位置偏移的像素点数,
* 正值为往右或往下偏移是,负值为往左或往上偏移量。
* 位移的参考点是要复制矩形的左上角坐标。
*/
public abstract void copyArea(int x, int y, int width, int height, int dx, int dy)

例如,以下代码示意图形的复制,将一个矩形的一部分、另一个矩形的全部分别自制。

g.drawRect(10,10,60,90);

g.fillRect(90,10,60,90);

g.copyArea(40,50,60,70,-20,80);

g.copyArea(110,50,60,60,10,80);

完整示例:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit; import javax.swing.JFrame; /**
* 使用Graphics类绘图
*
* @author
*
*/
public class GraphicsDemo extends JFrame { public GraphicsDemo() {
setSize(1000, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
} @Override
public void paint(Graphics g) {
g.setColor(Color.RED);
// 画线段
g.drawLine(5, 5, 20, 100);
// 画点
g.drawLine(20, 20, 20, 20); // 画普通矩形框
g.drawRect(30, 5, 100, 100);
// 填充普通矩形
g.fillRect(140, 5, 100, 100); // 画圆角矩形
g.drawRoundRect(250, 5, 100, 100, 30, 30);
// 填充圆角矩形
g.fillRoundRect(360, 5, 100, 100, 40, 40); // 画三维矩形
g.draw3DRect(5, 110, 100, 100, false);
// 填充三维矩形
g.fill3DRect(110, 110, 100, 100, true); // 画椭圆形
g.drawOval(220, 110, 100, 50);
// 填充椭圆形
g.fillOval(330, 110, 30, 90); // 画圆弧
g.drawArc(5, 220, 100, 100, 30, 150);
// 填充圆弧
g.fillArc(110, 220, 100, 100, 70, 220); // 画多边形
int px[] = { 210, 220, 270, 250, 240 };
int py[] = { 220, 250, 300, 270, 220 };
g.drawPolygon(px, py, px.length);
// 填充多边形
int px1[] = { 310, 320, 370, 400, 340 };
int py1[] = { 220, 250, 300, 270, 220 };
g.fillPolygon(px1, py1, px.length); // 擦除块
g.setColor(Color.BLUE);
g.fillOval(5, 330, 100, 100);
g.clearRect(30, 350, 30, 60); // 限定图形显示区域
g.clipRect(130, 380, 60, 60);
g.clipRect(150, 400, 50, 50);
g.fillRect(110, 330, 100, 100);
g.setClip(null); // 绘制字符串
g.setColor(Color.GREEN);
g.setFont(new Font("楷体", Font.BOLD, 20));
g.drawString("使用画笔绘制的字符串内容", 220, 345); // 绘制图像
Image img = Toolkit.getDefaultToolkit().getImage("img/monster.gif");
g.drawImage(img, 510, 5, 200, 200, Color.LIGHT_GRAY, this); // 复制图形
g.copyArea(0, 0, 500, 500, 505, 205);
} public static void main(String[] args) {
new GraphicsDemo().setVisible(true);
}
}

JavaGraphics类的绘图方法的更多相关文章

  1. Java-Graphics类的绘图方法实现

    Java-Graphics(画图类) 就比如画一个矩形,你给出矩形左上角坐标,再给出矩形长度和宽度就可以在JFrame上画出来一个矩形 除了矩形之外,还可以画椭圆.圆.圆弧.线段.多边形.图像等 下面 ...

  2. Java知多少(99)Graphics2D类的绘图方法

    Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管理以及文字布局等更精确的 ...

  3. 十一. 图形、图像与多媒体5.Graphics2D类的绘图方法

    Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管理以及文字布局等更精确的 ...

  4. Java Graphics2D类的绘图方法

    Graphics2D继承自Graphics,它扩展了Graphics的绘图功能,拥有更强大的二维图形处理能力,提供对几何形状.坐标转换.颜色管理以及文字布局等更精确的控制. Graphics2D定义了 ...

  5. Java知多少(98)Graphics类的绘图方法

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...

  6. 十一. 图形、图像与多媒体4.Graphics类的绘图方法

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...

  7. Java的Graphics类进行绘图的方法详解

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力. Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形等 ...

  8. [Xcode 实际操作]九、实用进阶-(19)重写父类的绘图方法,使用图形上下文绘制自定义图形

    目录:[Swift]Xcode实际操作 本文将演示如何使用图形上下文,绘制自定义图形. 使用快捷键[Command]+[N]创建一个新的类文件. (在项目文件夹[DemoApp]上点击鼠标右键[New ...

  9. MFC--自己优化滚动条的双缓冲绘图方法

        2010-01-09 18:45 MFC--自己优化的双缓冲绘图方法 自己通过尝试,用修改视图坐标的方法, 优化了双缓冲绘图,实现起来并不复杂. 在介绍这个方法前,重新介绍一下窗口和视口的概念 ...

随机推荐

  1. idea之查看类的上下级继承关系

  2. 数据结构---二叉搜索树BST实现

    1. 二叉查找树 二叉查找树(Binary Search Tree),也称为二叉搜索树.有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一 ...

  3. Python,subprocess模块(补充)

    1.subprocess模块,前戏 res = os.system('dir') 打印到屏幕,res为0或非0 os.popen('dir') 返回一个内存对象,相当于文件流 a = os.popen ...

  4. Python学习第二阶段Day2(json/pickle)、 shelve、xml、PyYAML、configparser、hashlib模块

    1.json/pickle   略. 2.shelve模块 import shelve # shelve 以key value的形式序列化,value为对象 class Foo(object): de ...

  5. 1.Linux标准IO编程

    1.1Linux系统调用和用户编程接口 1.1.1系统调用 用户程序向操作系统提出请求的接口.不同的系统提供的系统调用接口各不相同. 继承UNIX系统调用中最基本和最有用的部分. 调用按照功能分:进程 ...

  6. STM32单片机串口一键下载电路与操作方法详解

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash.2)SRAM = 芯片内置的RAM区,就是内存啦.3)系统存储器 = 芯片内部一块特定的区域,芯片出 ...

  7. 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)-----https://www.cnblogs.com/smileberry/p/4145872.html

    https://www.cnblogs.com/smileberry/p/4145872.html 使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件(转)

  8. HDU 1254 条件过程复杂的寻找最短路

    这里一看就是找箱子到终点的最短路 一开始还傻傻的以为人的位置给的很没有意思- -,然后果然错了 没过多久想明白了错误,因为你推箱子并不是你想去哪里推就能去哪推的,首先得考虑人能否过的去,因为可能人被箱 ...

  9. Codeforces Round #234 (Div. 2)

    A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...

  10. codevs1009 产生数

    题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规 ...