Java 变量实现矢量绘图的入门
·
一、核心思路
Java 实现矢量绘图的基础是 java.awt 和 javax.swing 包:
- 定义坐标变量(如
x,y,width,height)来描述图形的位置和尺寸; - 继承
JPanel并重写paintComponent(Graphics g)方法,这是绘图的核心方法; - 将
Graphics转换为Graphics2D(矢量绘图的核心类),支持更丰富的矢量操作; - 通过变量控制图形的绘制(移动、缩放、旋转等)。
二、入门示例代码
下面是一个完整的入门示例,用变量控制绘制一个可调整位置、大小和旋转角度的矩形(矢量图形),你可以直接复制运行:
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();
}
}
三、代码关键解释
-
核心变量:
rectX/rectY:控制矩形的位置,修改这两个值可以移动图形;rectWidth/rectHeight:控制矩形尺寸,缩放时只需修改这两个变量(矢量特性);rotateAngle:控制旋转角度,通过数学计算(弧度)实现矢量旋转。
-
Graphics2D 关键操作:
setRenderingHint:开启抗锯齿,让矢量图形边缘平滑(矢量绘图的基础优化);translate:平移坐标系,让图形绕自身中心旋转(而非窗口原点);rotate:基于角度变量旋转图形,矢量旋转不损失精度;drawRect/fillRect:绘制矢量矩形(仅记录坐标和尺寸,而非像素)。
-
动态更新:
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);
总结
- Java 矢量绘图的核心是用变量定义图形的坐标、尺寸、角度,而非固定像素;
Graphics2D是矢量绘图的核心类,支持旋转、缩放等矢量操作,且图形缩放无失真;- 修改控制图形的变量后,调用
repaint()即可动态更新矢量图形,这是矢量绘图的灵活特性。
更多推荐



所有评论(0)