前言:
本文将介绍Java
绘图工具的使用,通过具体示例,演示通过Java
的Graphics
类在JFrame
中的JPanel
上绘制图形的步骤和方法。
一.绘图的相关Java
类介绍:
JFrame
类,是Java
图形用户界面(GUI)工具包swing
中的存放组件的容器。相当于相框。JPanel
类,是Java
图形用户界面(GUI)工具包swing
中的面板容器类。相当于画板。Graphics
类,是Java
用于绘图和显示格式化文字的工具。相当于画笔。
二.绘图步骤:
- 创建相框
JFrame
对象jFrame
。 - 创建画板
JPanel
对象jPanel
,重写paint()
方法。 - 在
paint()
方法中,用画笔Graphics
对象graphics
的drawXXX()
进行绘图。 - 将画板
jPanel
嵌入相框中jFrame.add(jPanel)
。 - 设置相框为可见状态
jFrame.setVisible(true)
和相框大小jFrame.setSize(宽度, 高度)
。
三.绘图代码示例:
案例:用Graphics
画一个小人图像。
1.绘图效果图片:
2.绘画实现代码:
按照上述5个步骤,即可快速绘图。
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawPersonDemo {
public static void main(String[] args) {
// 创建相框
JFrame jFrame = new JFrame();
// 创建画板
JPanel jpanel = new JPanel() {
//序列号(可省略)
private static final long serialVersionUID = 1L;
// 重写paint方法
@Override
public void paint(Graphics graphics) {
// 必须先调用父类的paint方法
super.paint(graphics);
// 用画笔Graphics,在画板JPanel上画一个小人
graphics.drawOval(100, 70, 30, 30);// 头部(画圆形)
graphics.drawRect(105, 100, 20, 30);// 身体(画矩形)
graphics.drawLine(105, 100, 75, 120);// 左臂(画直线)
graphics.drawLine(125, 100, 150, 120);// 右臂(画直线)
graphics.drawLine(105, 130, 75, 150);// 左腿(画直线)
graphics.drawLine(125, 130, 150, 150);// 右腿(画直线)
}
};
//将绘有小人图像的画板嵌入到相框中
jFrame.add(jpanel);
// 设置画框大小(宽度,高度),默认都为0
jFrame.setSize(300, 300);
// 将画框展示出来。true设置可见,默认为false隐藏
jFrame.setVisible(true);
}
}
注意:重写JPanel
中的paint()
方法时候,必须保留super.paint(graphics);
,并且优先调用父类paint()
方法,否则JPanel
画出来是空白面板,因为画笔要在父类中创建,然后在子类中使用才会生效。另附上paint()
方法的源码节选:
public void paint(Graphics g) {
boolean shouldClearPaintFlags = false;
if ((getWidth() <= 0) || (getHeight() <= 0)) {
return;
}
//在此出实例化画笔Graphics g对象,所以要先调用父类。否则画笔无效
Graphics componentGraphics = getComponentGraphics(g);
Graphics co = componentGraphics.create();
其他省略……