Java用JFrame、JPanel、Graphics绘图案例讲解

前言:

本文将介绍Java绘图工具的使用,通过具体示例,演示通过JavaGraphics类在JFrame中的JPanel上绘制图形的步骤和方法。

一.绘图的相关Java类介绍:

  • JFrame类,是Java图形用户界面(GUI)工具包swing中的存放组件的容器。相当于相框。
  • JPanel类,是Java图形用户界面(GUI)工具包swing中的面板容器类。相当于画板。
  • Graphics类,是Java用于绘图和显示格式化文字的工具。相当于画笔。

二.绘图步骤:

  1. 创建相框JFrame对象jFrame
  2. 创建画板JPanel对象jPanel,重写paint()方法。
  3. paint()方法中,用画笔Graphics对象graphicsdrawXXX()进行绘图。
  4. 将画板jPanel嵌入相框中jFrame.add(jPanel)
  5. 设置相框为可见状态jFrame.setVisible(true)和相框大小jFrame.setSize(宽度, 高度)

三.绘图代码示例:

案例:用Graphics画一个小人图像。

1.绘图效果图片:

Java用JFrame、JPanel、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();

        其他省略……

你可能感兴趣的:(Android,Java,java,Graphics,JPanel,JFrame,绘图)