文章目录
java 的绘图
1 java 坐标体系
在 java 中,坐标原点位于左上角,以像素为单位。以 (x, y) 为例,第一个是 x 坐标,表示当前位置为水平方向,距离坐标原点 x 个像素;第二个是 y 坐标,表示当前位置为垂直方向,距离坐标原点 y 个像素。

像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。 可以将像素视为整个图像中不可分割的单位或者是元素。 不可分割的意思是它不能够再切割成更小单位抑或是元素,它是以一个单一颜色的小格存在 。 每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。像素是一个密度单位,而厘米是一个长度单位,2者无法进行比较。
2 绘图的方法
(1)JFrame 介绍
JFrame 是 Java Swing 中用于创建图形用户界面(GUI)的一个类。它提供了一个可以包含其他组件的窗口,这个窗口可以最大化、最小化和关闭。JFrame 是一个顶层容器,它可以添加组件,但不能将一个窗口添加到另一个容器中。当你需要创建一个窗口时,可以实例化 JFrame 类或其子类。
JFrame 的常用方法:
-
JFrame():创建一个无标题的窗口。
-
JFrame(String s):创建一个标题为 s 的窗口。
-
setSize(int width, int height):设置窗口的大小。
-
setLocation(int x, int y):设置窗口的位置,默认位置为(0,0)。
-
setBounds(int a, int b, int width, int height):设置窗口的初始位置和大小。
-
setBackground(Color color):设置窗体的背景颜色。
-
setVisible(boolean b):设置窗口是否可见,默认窗口是不可见的。
-
setResizable(boolean b):设置窗口是否可以调整大小,默认窗口是可调整的。
-
setDefaultCloseOperation(int operation):设置窗口关闭操作。
operation参数的常见取值及其含义:1.
JFrame.EXIT_ON_CLOSE- 含义:当窗口关闭时,退出整个应用程序。
- 行为:调用
System.exit(0),终止 Java 虚拟机,关闭所有窗口和资源。 - 适用场景:适用于主窗口的关闭操作,确保程序完全退出。
2.
JFrame.DISPOSE_ON_CLOSE- 含义:当窗口关闭时,仅关闭当前窗口,但不退出应用程序。
- 行为:调用窗口的
dispose()方法,释放当前窗口的资源。 - 适用场景:适用于非主窗口(如对话框、辅助窗口),关闭窗口后程序继续运行。
3.
JFrame.HIDE_ON_CLOSE- 含义:当窗口关闭时,隐藏当前窗口,但不释放资源。
- 行为:窗口仍然存在,只是不可见。可以通过调用
setVisible(true)再次显示窗口。 - 适用场景:适用于需要多次显示和隐藏的窗口。
4.
JFrame.DO_NOTHING_ON_CLOSE- 含义:当窗口关闭时,不执行任何操作。
- 行为:窗口不会关闭,用户需要手动处理窗口关闭事件(例如通过监听器)。
- 适用场景:适用于需要自定义窗口关闭逻辑的场景,例如在关闭前提示用户保存数据。
(2)JPanel 介绍
JPanel 的基本概念:
- 是一个通用的轻量级容器,用于组织和容纳其他组件(如按钮、文本框、标签等)。
- 继承自
JComponent,是 Swing 中最常用的容器之一。 - 通常用于构建复杂的用户界面布局,可以嵌套在其他容器中(如
JFrame)。
(3)JPanel和JFrame的比较
| 特性 | JFrame | JPanel |
|---|---|---|
| 用途 | 创建独立的窗口,是 Swing 程序的顶级容器。 | 用于组织和容纳其他组件,是轻量级容器。 |
| 是否独立 | 是独立的窗口,可以独立显示。 | 不是独立的窗口,必须嵌套在其他容器中(如 JFrame)。 |
| 默认布局 | 默认使用 BorderLayout。 | 默认使用 FlowLayout。 |
| 窗口功能 | 提供标题栏、边框、最大化/最小化按钮、关闭按钮等。 | 没有窗口功能,仅用于组件布局和组织。 |
| 事件处理 | 可以处理窗口级别的事件(如关闭事件)。 | 主要处理组件级别的事件(如鼠标事件、键盘事件)。 |
| 是否可嵌套 | 不能嵌套其他顶级容器(如 JFrame),但可以嵌套 JPanel。 | 可以嵌套在其他容器中,也可以包含其他组件(如按钮、标签等)。 |
| 线程安全 | 线程安全(但其子组件可能不是线程安全的)。 | 不是线程安全的。 |
| 默认大小 | 默认大小由操作系统决定,通常为一个最小化的窗口。 | 默认大小为 (0, 0),需要手动设置大小或通过布局管理器调整。 |
(4)Graphics 的介绍
在 Java 中,Graphics 是一个抽象类,用于在组件(如窗口、面板、画布等)上绘制图形和文本。它是 Java 图形绘制的核心类,提供了基本的绘图功能,包括绘制线条、矩形、圆形、文本等。
通过 Graphics 对象,开发者可以在组件上绘制图形、文本、图像等。Graphics 对象通常由组件的 paint() 或 paintComponent() 方法提供。
Graphics 类常用方法:
1. 设置绘图属性
- 设置绘图操作的颜色。
setColor(Color c)- 形参:
Color c:目标颜色。
- 形参:
- 设置绘图操作的字体。
setFont(Font font)- 形参:
Font font:目标字体。
- 形参:
- 设置裁剪区域为指定矩形。
setClip(int x, int y, int width, int height)- 形参:
int x, y:裁剪区域左上角的坐标。int width, height:裁剪区域的宽度和高度。
- 形参:
- 清空指定矩形区域。
clearRect(int x, int y, int width, int height)- 形参:
int x, y:矩形左上角的坐标。int width, height:矩形的宽度和高度。
- 形参:
2. 绘制基本图形
- 绘制从
(x1, y1)到(x2, y2)的直线。
drawLine(int x1, int y1, int x2, int y2)- 形参:
int x1, y1:起点坐标。int x2, y2:终点坐标。
- 形参:
- 绘制矩形的边框。
drawRect(int x, int y, int width, int height)- 形参:
int x, y:矩形左上角的坐标。int width, height:矩形的宽度和高度。
- 形参:
- 绘制填充的矩形。
fillRect(int x, int y, int width, int height)- 形参:
int x, y:矩形左上角的坐标。int width, height:矩形的宽度和高度。
- 形参:
- 绘制圆角矩形的边框。
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)- 形参:
int x, y:矩形左上角的坐标。int width, height:矩形的宽度和高度。int arcWidth, arcHeight:圆角的宽度和高度。
- 形参:
- 绘制填充的圆角矩形。
fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)- 形参:
int x, y:矩形左上角的坐标。int width, height:矩形的宽度和高度。int arcWidth, arcHeight:圆角的宽度和高度。
- 形参:
- 绘制椭圆的边框。
drawOval(int x, int y, int width, int height)- 形参:
int x, y:椭圆左上角的坐标。int width, height:椭圆的宽度和高度。
- 形参:
- 绘制填充的椭圆。
fillOval(int x, int y, int width, int height)- 形参:
int x, y:椭圆左上角的坐标。int width, height:椭圆的宽度和高度。
- 形参:
- 绘制弧形的边框。
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)- 形参:
int x, y:弧形左上角的坐标。int width, height:弧形的宽度和高度。int startAngle:起始角度(以度为单位)。int arcAngle:弧形的角度(以度为单位)。
- 形参:
- 绘制填充的弧形。
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)- 形参:
int x, y:弧形左上角的坐标。int width, height:弧形的宽度和高度。int startAngle:起始角度(以度为单位)。int arcAngle:弧形的角度(以度为单位)。
- 形参:
- 绘制多边形的边框。
drawPolygon(int[] xPoints, int[] yPoints, int nPoints)- 形参:
int[] xPoints:多边形的 x 坐标数组。int[] yPoints:多边形的 y 坐标数组。int nPoints:点的数量。
- 形参:
- 绘制填充的多边形。
fillPolygon(int[] xPoints, int[] yPoints, int nPoints)- 形参:
int[] xPoints:多边形的 x 坐标数组。int[] yPoints:多边形的 y 坐标数组。int nPoints:点的数量。
- 形参:
3. 绘制文本
- 在指定位置绘制字符串。
drawString(String str, int x, int y)- 形参:
String str:要绘制的字符串。int x, y:字符串的起始坐标。
- 形参:
4. 绘制图像
- 在指定位置绘制图像。
drawImage(Image img, int x, int y, ImageObserver observer)- 形参:
Image img:要绘制的图像。int x, y:图像的起始坐标。ImageObserver observer:图像观察者(用于处理图像加载事件)。
- 形参:
- 按指定大小绘制图像。
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)- 形参:
Image img:要绘制的图像。int x, y:图像的起始坐标。int width, height:图像的宽度和高度。ImageObserver observer:图像观察者。
- 形参:
5. 其他操作
- 将指定区域的内容复制到新位置。
copyArea(int x, int y, int width, int height, int dx, int dy)- 形参:
int x, y:源区域左上角的坐标。int width, height:源区域的宽度和高度。int dx, dy:目标区域相对于源区域的偏移量。
- 形参:
- 释放
Graphics对象的资源。
dispose()- 功能:释放与
Graphics对象关联的系统资源。在绘图完成后调用此方法以避免资源泄漏。
- 功能:释放与
(5)开始绘图
我们由一个程序来入手:
public class Draw extends JFrame {
//定义一个面板
private MyPanel mp = null;
public static void main(String[] args) {
new Draw();
}
//构造器
public Draw() {
//初始化面板
mp = new MyPanel();
//把面板放入到窗口中
//即把 JPanel 放入 JFrame
this.add(mp);
//设置窗口的大小
this.setSize(400,300);
//setDefaultCloseOperation(int operation):设置窗口关闭操作。
//关闭窗口就退出程序
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setVisible(boolean b):设置窗口是否可见,默认窗口是不可见的。
//true:可见;false:不可见
this.setVisible(true);//可以显示
}
}
class MyPanel extends JPanel {
//1.画一个圆形\椭圆
//g.drawOval(10,10,100,100);
//2.画直线
//g.drawLine(10,10,100,100);
//3.画矩形边框
//g.drawRect(10, 10, 100, 100);
//4.填充矩形
//(1)设置画笔的颜色
//g.setColor(Color.blue);
//(2)填充
//g.fillRect(10, 10, 100, 100);
//5.填充椭圆
//(1)设置画笔的颜色
//g.setColor(Color.red);
//(2)填充
//g.fillOval(10, 10, 100, 100);
//6.画图片
//(1)获取图片资源;"/1.jpg" 表示在该项目的根目录去获取 1.jpg 图片资源
//所以我们需要先把 1.png 放到根目录下,注意是 out 目录里面的项目根目录
//Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.jpg"));
//drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
//形参:
//Image img:要绘制的图像。
//int x, y:图像的起始坐标。
//int width, height:图像的宽度和高度。
//ImageObserver observer:图像观察者。
//g.drawImage(image, 10, 10, 175, 221, this);
//7.画字符串
//(1)给画笔设置颜色
g.setColor(Color.red);
//(2)设置字体; 如:宋体-粗体-字体大小50
g.setFont(new Font("宋体", Font.BOLD, 50));
//(3)画;这里的 150-100 在字体的左下角
g.drawString("你好呀!", 150, 100);
}
}
在上面的程序中,我们并没有调用 paint() 方法,但是这个方法却执行了,为什么呢?
Component 类提供了2 个和绘图相关的最重要的方法:
- paint(Graphics g) :绘制组件的外观
- repaint() :刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用 paint() 方法来绘制组件。在以下情况 paint() 将会被调用:
- 窗口最小化,再最大化
- 窗口的大小发生变化(我们手动去拖动调整大小)
Java绘图基础教程
1215

被折叠的 条评论
为什么被折叠?



