Java绘图基础
一、Java 坐标体系
1. 像素的概念
-
计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的
-
-
像素是一个密度单位,而厘米是长度单位,两者无法比较
2. 坐标

横坐标:x
纵坐标:y
坐标原点:位于左上角
距离:表示距离原点有多少个像素单位
二、绘图方法
1. 绘图原理
Component 类提供了两个和绘图相关最重要的方法
-
1. paint(Graphics g)绘制组件的外观
-
当组件第一次在屏幕显示的时候,程序会自动的调用 paint()方法来绘制组件。
在以下情况 paint()将会被调用
2. 绘制画板
类:JPanel
自定义类继承该类,重载 paint 构造器,调用父类的方法完成构造器的初始化(画一个圆为示例)
class MyPanel extends JPanel{@Overridepublic void paint(Graphics g) {super.paint(g);g.drawOval(150,50,100,100);}
}
代码解析
-
Graphics
是一个类,可以理解为画笔,通过调用该类中的方法来完成绘图
-
-
画圆的方法:首先根据坐标找到对应的位置,从该坐标点开始,按照给定的长度和宽度开始画圆(如果长宽不一致就是椭圆)
3. 绘制窗口,显示画板内容
类:JFrame
让主类继承该类,创建画板对象,在该类的构造器中完成窗口的初始化并添加画板
窗口的构建步骤、
-
创建一个画板对象(初始化画板)
-
-
this.setSize
(长,宽):设置窗口的大小
-
-
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
:关闭窗口时退出程序,避免占用资源
运行查看效果:在主函数中创建一个窗口对象,第一次会自动调用 paint()方法完成绘图(前面的绘图原理)
public class drawcircle extends JFrame{MyPanel panel = null;public drawcircle(){panel = new MyPanel();this.add(panel);this.setSize(400,300);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {new drawcircle();}
}
绘图效果

4. Graphics 类方法
方法 | 描述 |
---|
setColor(Color c) | 设置绘图颜色。使用 Color 类指定颜色。 |
setFont(Font font) | 设置字体。使用 Font 类指定字体样式。 |
drawLine(int x1, int y1, int x2, int y2) | 绘制一条线段,连接指定的两个坐标点 (x1, y1) 和 (x2, y2) 。 |
drawRect(int x, int y, int width, int height) | 绘制矩形,指定矩形的左上角 (x, y) 和宽度、高度。 |
fillRect(int x, int y, int width, int height) | 绘制并填充矩形,指定矩形的左上角 (x, y) 和宽度、高度。 |
drawOval(int x, int y, int width, int height) | 绘制椭圆,指定椭圆的外接矩形的左上角 (x, y) 和宽度、高度。 |
fillOval(int x, int y, int width, int height) | 绘制并填充椭圆,指定椭圆的外接矩形的左上角 (x, y) 和宽度、高度。 |
drawString(String str, int x, int y) | 在指定位置 (x, y) 绘制文本字符串。 |
drawImage(Image img, int x, int y, ImageObserver observer) | 在指定位置 (x, y) 绘制图片。 |
(1)绘制直线:传入起始坐标和终点坐标
(2)绘制矩形边框:传入起始坐标,传入矩形的长和宽
(3)填充矩形颜色:需要在绘制前设置矩形颜色(默认是黑色)
方法:setColor(Color.颜色名)
class MyPanel extends JPanel{@Overridepublic void paint(Graphics g) {super.paint(g);System.out.println("paint方法被调用");g.setColor(Color.lightGray);g.fillRect(50,50,100,100);}
}
(4)绘制椭圆边框,填充椭圆边框的方法大同小异,这里不做赘述
(5)绘制文本字符串
-
drwaString(“字符串”,起始横坐标,起始纵坐标),起始坐标对应字体的左下角
-
-
需要设置字体(字体的类型,字体的样式,字体的大小)
-
g.setFont(new Font("楷体",Font.PLAIN,100))
-
字体样式
字段 | 描述 |
---|
Font.PLAIN | 普通字体,默认样式,没有加粗和斜体效果。 |
Font.BOLD | 粗体样式,文本加粗,通常用于强调文本。 |
Font.ITALIC | 斜体样式,文本倾斜,用于表示风格或突出显示部分文本。 |
Font.BOLD + Font.ITALIC | 粗斜体样式,文本既加粗又倾斜,通常用于非常显眼的文本。 |
class MyPanel extends JPanel{@Overridepublic void paint(Graphics g) {super.paint(g);System.out.println("paint方法被调用");g.setColor(Color.lightGray); g.setFont(new Font("楷体",Font.PLAIN,100));g.drawString("Java",70,150);}
}
(6)绘制图片
准备工作:把图片放在 out 文件夹下的项目的根目录(易错:如果有多个包时,不是放在对应的包下,而是该项目名称的根目录下)
绘制步骤
-
获取图片资源: Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/image.png"))
,此处为固定写法,把路径换成图片名称即可
-
class MyPanel extends JPanel{@Overridepublic void paint(Graphics g) {super.paint(g);System.out.println("paint方法被调用");Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/image.png"));g.drawImage(image,0,0,100,140,this);}
}