使用Java的Graphics类进行绘图

参考博客:

作者:江湖人称小明
来源:CSDN
原文:https://blog.csdn.net/zhliro/article/details/45564251
版权声明:本文为博主原创文章,转载请附上博文链接!

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

PS:java里的绘图界面是以左上角为坐标原点的向右为x 的正轴,向下为y 的正轴。

  1. 画线
    在窗口画一条线段,可以使用Graphics类的drawLine()方法:
public abstract void drawLine(int x1,int y1,int x2,int y2)
(x1,y1) , (x2,y2) 分别为线段的两个端点。
eg:
drawLine(50,30,450,260);
功能:在点(50,30)与点(450,260)之间画一条线段。

完整代码:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

public class draw extends JFrame{
	public draw()
	{
		setSize(500,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
	}
	public void paint(Graphics g)
	{
		g.setColor(Color.blue);
		g.drawLine(50,30,450,260);
	}
	public static void main(String[] args)
	{
		new draw().setVisible(true);
	}
}


运行结果:
使用Java的Graphics类进行绘图_第1张图片
2.画一个点

drawLine(100,100,100,100);     //画一个点
功能:在(100,100) 处画一个点。

3.画普通矩形

1. 绘制指定矩形的边框。
矩形的左边缘和右边缘分别位于 x 和 x + width,上边缘和下边缘分别位于 y 和 y + height。使用图形上下文的当前颜色绘制该矩形。
public void drawRect(int x, int y, int width, int height)

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

eg:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class draw extends JFrame{
	public draw()
	{
		setSize(500,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
	}
	public void paint(Graphics g)
	{
		g.setColor(Color.blue); //设置颜色
		g.drawRect(100,100,300,100); //画出长为300,宽为100的矩形框。
	}
	public static void main(String[] args)
	{
		new draw().setVisible(true);
	}
}

运行结果:
使用Java的Graphics类进行绘图_第2张图片

eg:
g.fillRect(100,100,300,100); //填充长为300,宽为100的矩形。

运行结果:
使用Java的Graphics类进行绘图_第3张图片
4.画圆角矩形

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

public abstract void fillRoundRect(int x, int y, int width, int height,
        int arcWidth, int arcHeight)

PS:参数 arcWidth 表示4个角弧度的水平直径,arcHeight 表示4个角弧度的垂直直径。
eg:
g.drawRoundRect(100,100,300,100, 40, 40); 

运行结果:
使用Java的Graphics类进行绘图_第4张图片

g.fillRoundRect(100,100,300,100, 40, 40); 

运行结果:
使用Java的Graphics类进行绘图_第5张图片

eg:
当矩形的宽和高相等,圆角弧的横向直径和圆角弧的纵向直径也相等,并等于矩形的宽和高时,画的就是圆形。
g.fillRoundRect(200,110,100,100, 100, 100); 

运行结果:
使用Java的Graphics类进行绘图_第6张图片
5.画三维矩形

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

2. 绘制一个用当前颜色填充的 3-D 高亮显示矩形。矩形的边是高亮显示的,以至于从左上角看呈斜面并加亮。 高亮显示效果所用的颜色根据当前颜色确定
public void fill3DRect(int x, int y, int width, int height, boolean raised)

PS:参数 raised 表示一个用于确定矩形是凸出平面显示还是凹入平面显示的 boolean 值。
eg:
g.draw3DRect(80,100,200,100,true); // 画一个3D矩形线框

运行结果:
使用Java的Graphics类进行绘图_第7张图片

eg:
g.fill3DRect(80,100,200,100,true); 

运行结果:
使用Java的Graphics类进行绘图_第8张图片
6.画椭圆形

 1.绘制椭圆的边框。
  得到一个圆或椭圆,它刚好能放入由 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)
eg:
g.drawOval(80,100,200,100);

运行结果:
使用Java的Graphics类进行绘图_第9张图片

eg:
g.fillOval(80,100,200,100);

运行结果:
使用Java的Graphics类进行绘图_第10张图片
7.画圆弧

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

 2.填充覆盖指定矩形的圆弧或椭圆弧。
public abstract void fillArc(int x, int y, int width, int height,
        int startAngle, int arcAngle)
        
PS:参数 startAngle 表示开始角度,arcAngle 表示相对于开始角度而言弧跨越的角度。
得到的弧从 startAngle 开始跨越 arcAngle 度。对角度的解释如下:0 度角位于 3 点钟位置。正值指示逆时针旋转,负值指示顺时针旋转。
  弧的中心是矩形的中心,此矩形的原点为 (x, y),大小由 width 和 height 参数指定。得到的弧覆盖 width + 1 像素宽乘以 height + 1 像素高的区域。
  角度是相对于外接矩形的非正方形区域指定的,45 度角始终落在从椭圆中心到外接矩形右上角的连线上。
eg:
g.drawArc(80,100,200,100,0,120); 

运行结果:
使用Java的Graphics类进行绘图_第11张图片

eg:
g.fillArc(80,100,200,100,0,120); 

使用Java的Graphics类进行绘图_第12张图片
8.画多边形

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

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

 2.填充由 x 和 y 坐标数组定义的闭合多边形。
public abstract void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)

PS:绘制由 nPoint 个线段定义的多边形,其中前 nPoint - 1 个线段是 1 ≤ i ≤ nPoint 时从 (xPoints[i - 1], yPoints[i - 1]) 到 (xPoints[i], yPoints[i]) 的线段。如果最后一个点和第一个点不同,则图形会通过在这两点间绘制一条线段来自动闭合。
eg:
		int px1[]={50,400,450,50};
		int py1[]={50,100,200,260};
		g.drawPolygon(px1,py1,4);

使用Java的Graphics类进行绘图_第13张图片
此外:也可以用多边形对象画多边形。用多边形类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) // 填充多边形。
eg:
		Polygon polygon1=new Polygon();    
		polygon1.addPoint(250,100);   
		polygon1.addPoint(90,200);   
		polygon1.addPoint(400,250);   
		g.drawPolygon(polygon1);

运行结果:
使用Java的Graphics类进行绘图_第14张图片

eg:
		int x[]={140,180,170,180,140,100,110,100};  
		int y[]={50,125,175,225,250,225,175,125};   
		Polygon polygon2 = new Polygon(x,y,8);  
		g.setColor(Color.yellow);   
		g.fillPolygon(polygon2);

运行结果:
使用Java的Graphics类进行绘图_第15张图片
9.画字符串

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

public abstract void drawString(String str, int x, int y)
eg:
		g.setColor(Color.GREEN);
		g.setFont(new Font("楷体", Font.HANGING_BASELINE, 20));
		g.drawString("使用画笔绘制的字符串内容", 80, 150);

运行结果:
使用Java的Graphics类进行绘图_第16张图片
10.画图像

绘制图像的常用方法:
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只绘制完整的图像,那么你需要跟踪图像的加载。
eg:
		Image img = Toolkit.getDefaultToolkit().getImage("D:\\java\\java工作区\\test\\src\\test2\\表白图片.png");
		g.drawImage(img, 200, 100, 500, 500, Color.LIGHT_GRAY, this);

运行结果:
使用Java的Graphics类进行绘图_第17张图片
10.擦除矩形块

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

通过使用当前绘图表面的背景色进行填充来清除指定的矩形。

public abstract void clearRect(int x, int y, int width, int height)
eg:
g.setColor(Color.blue); 
g.fillOval(50,50,100,100);
g.clearRect(70,70,40,55);

运行结果:
使用Java的Graphics类进行绘图_第18张图片
11.限定作图显示区域

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

限制图形在指定区域内的显示,超出部分不显示。多个限制区有覆盖时,得到限制区域的交集区域。

public abstract void clipRect(int x, int y, int width, int height)
eg:
g.clipRect(0,0,100,50);
g.clipRect(50,25,100,50);

相当于

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

12.复制图形

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

dx和dy分别表示将图形粘贴到原位置偏移的像素点数,正值为往右或往下偏移是,负值为往左或往上偏移量。位移的参考点是要复制矩形的左上角坐标。

public abstract void copyArea(int x, int y, int width, int height, int dx, int dy)

eg:
		g.drawRect(50,50,200,100);

		g.fillRect(60,60,60,70);

		g.copyArea(40,50,60,70,200,200);

运行结果:
使用Java的Graphics类进行绘图_第19张图片

你可能感兴趣的:(java基础知识)