一、核心思路

Java 实现矢量绘图的基础是 java.awt 和 javax.swing 包:

  1. 定义坐标变量(如 xywidthheight)来描述图形的位置和尺寸;
  2. 继承 JPanel 并重写 paintComponent(Graphics g) 方法,这是绘图的核心方法;
  3. 将 Graphics 转换为 Graphics2D(矢量绘图的核心类),支持更丰富的矢量操作;
  4. 通过变量控制图形的绘制(移动、缩放、旋转等)。

二、入门示例代码

下面是一个完整的入门示例,用变量控制绘制一个可调整位置、大小和旋转角度的矩形(矢量图形),你可以直接复制运行:

java

运行

import javax.swing.*;
import java.awt.*;

// 自定义面板类,用于绘制矢量图形
class VectorDrawPanel extends JPanel {
    // 核心变量:控制图形的位置、尺寸、旋转角度
    private int rectX = 100;    // 矩形左上角x坐标
    private int rectY = 100;    // 矩形左上角y坐标
    private int rectWidth = 150;// 矩形宽度
    private int rectHeight = 80;// 矩形高度
    private double rotateAngle = Math.toRadians(15); // 旋转角度(转成弧度)

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // 将Graphics转换为Graphics2D,支持矢量绘图(旋转、缩放等)
        Graphics2D g2d = (Graphics2D) g;
        
        // 开启抗锯齿,让矢量图形边缘更平滑(矢量绘图必备)
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        // 1. 绘制原始矩形(用变量控制)
        g2d.setColor(Color.BLUE);
        g2d.drawRect(rectX, rectY, rectWidth, rectHeight); // 仅绘制轮廓(矢量)

        // 2. 绘制旋转后的矩形(通过变量修改角度)
        g2d.setColor(Color.RED);
        // 先平移坐标系到矩形中心,再旋转,避免绕原点旋转
        g2d.translate(rectX + rectWidth/2, rectY + rectHeight/2);
        g2d.rotate(rotateAngle);
        // 绘制填充矩形(矢量),坐标以旋转后的中心为基准
        g2d.fillRect(-rectWidth/2, -rectHeight/2, rectWidth, rectHeight);

        // 重置坐标系(避免影响后续绘制)
        g2d.rotate(-rotateAngle);
        g2d.translate(-(rectX + rectWidth/2), -(rectY + rectHeight/2));
    }
}

// 主窗口类
public class VectorDrawingDemo {
    public static void main(String[] args) {
        // 创建窗口
        JFrame frame = new JFrame("Java 矢量绘图入门");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null); // 窗口居中

        // 添加自定义绘图面板
        VectorDrawPanel panel = new VectorDrawPanel();
        panel.setBackground(Color.WHITE);
        frame.add(panel);

        // 显示窗口
        frame.setVisible(true);

        // 演示:修改变量,动态更新图形(每500ms旋转5度)
        new Timer(500, e -> {
            // 修改旋转角度变量
            panel.rotateAngle += Math.toRadians(5);
            // 重绘面板(更新图形)
            panel.repaint();
        }).start();
    }
}

三、代码关键解释

  1. 核心变量

    • rectX/rectY:控制矩形的位置,修改这两个值可以移动图形;
    • rectWidth/rectHeight:控制矩形尺寸,缩放时只需修改这两个变量(矢量特性);
    • rotateAngle:控制旋转角度,通过数学计算(弧度)实现矢量旋转。
  2. Graphics2D 关键操作

    • setRenderingHint:开启抗锯齿,让矢量图形边缘平滑(矢量绘图的基础优化);
    • translate:平移坐标系,让图形绕自身中心旋转(而非窗口原点);
    • rotate:基于角度变量旋转图形,矢量旋转不损失精度;
    • drawRect/fillRect:绘制矢量矩形(仅记录坐标和尺寸,而非像素)。
  3. 动态更新

    • Timer 定时修改 rotateAngle 变量,调用 repaint() 重绘图形,体现 “变量控制矢量图形” 的核心逻辑。

四、扩展:绘制更多矢量图形

只需修改变量和绘图方法,就能实现其他矢量图形:

java

运行

// 绘制矢量圆形(变量控制圆心和半径)
int circleX = 250, circleY = 250, radius = 50;
g2d.drawOval(circleX - radius, circleY - radius, 2*radius, 2*radius);

// 绘制矢量线段(变量控制起点和终点)
int lineX1 = 50, lineY1 = 50, lineX2 = 400, lineY2 = 400;
g2d.drawLine(lineX1, lineY1, lineX2, lineY2);

// 绘制矢量多边形(变量数组控制顶点)
int[] polyX = {300, 350, 325}; // 多边形顶点x坐标数组
int[] polyY = {100, 100, 50};  // 多边形顶点y坐标数组
g2d.drawPolygon(polyX, polyY, 3);

总结

  1. Java 矢量绘图的核心是用变量定义图形的坐标、尺寸、角度,而非固定像素;
  2. Graphics2D 是矢量绘图的核心类,支持旋转、缩放等矢量操作,且图形缩放无失真;
  3. 修改控制图形的变量后,调用 repaint() 即可动态更新矢量图形,这是矢量绘图的灵活特性。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐