java绘图的基本介绍

Java绘图基础教程

java 的绘图

1 java 坐标体系

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

image-20250124182945425

像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。 可以将像素视为整个图像中不可分割的单位或者是元素。 不可分割的意思是它不能够再切割成更小单位抑或是元素,它是以一个单一颜色的小格存在 。 每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。像素是一个密度单位,而厘米是一个长度单位,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的比较

特性JFrameJPanel
用途创建独立的窗口,是 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 个和绘图相关的最重要的方法:

  1. paint(Graphics g) :绘制组件的外观
  2. repaint() :刷新组件的外观

  当组件第一次在屏幕显示的时候,程序会自动的调用 paint() 方法来绘制组件。在以下情况 paint() 将会被调用:

  1. 窗口最小化,再最大化
  2. 窗口的大小发生变化(我们手动去拖动调整大小)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值