java swing 如何画图
使用 Java Swing 绘制图形
在 Java Swing 中,绘制图形通常通过重写 JComponent 的 paintComponent(Graphics g) 方法实现。Graphics 类提供了多种绘图方法,如绘制线条、矩形、圆形等。
创建自定义绘图组件
创建一个继承自 JPanel 的类,并重写 paintComponent 方法。在此方法中调用 Graphics 的绘图方法。

import javax.swing.*;
import java.awt.*;
class DrawingPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(10, 10, 100, 100); // 绘制直线
g.drawRect(50, 50, 80, 60); // 绘制矩形
g.drawOval(100, 100, 50, 50); // 绘制圆形
}
}
设置主窗口并显示
将自定义的绘图面板添加到 JFrame 中,并设置窗口属性。
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Swing 绘图示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.add(new DrawingPanel());
frame.setVisible(true);
}
}
使用 Graphics2D 增强绘图功能
Graphics2D 是 Graphics 的子类,提供了更丰富的绘图功能,如设置线条宽度、填充颜色等。

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 设置线条宽度和颜色
g2d.setStroke(new BasicStroke(3));
g2d.setColor(Color.RED);
g2d.drawLine(10, 10, 100, 100);
// 填充矩形
g2d.setColor(Color.BLUE);
g2d.fillRect(50, 50, 80, 60);
}
绘制复杂图形
通过 Path2D 类可以绘制复杂的自定义图形。
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Path2D path = new Path2D.Double();
path.moveTo(50, 50);
path.lineTo(100, 100);
path.lineTo(150, 50);
path.closePath();
g2d.draw(path);
}
处理动态绘图
如果需要动态更新图形,可以存储图形数据并调用 repaint() 方法触发重绘。
class DrawingPanel extends JPanel {
private List<Point> points = new ArrayList<>();
public void addPoint(Point p) {
points.add(p);
repaint(); // 触发重绘
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (Point p : points) {
g.fillOval(p.x, p.y, 5, 5);
}
}
}
注意事项
- 在
paintComponent方法中必须调用super.paintComponent(g)以确保组件正确渲染。 - 避免在
paintComponent中执行耗时操作,以免影响性能。 - 使用
Graphics2D时,可以通过setRenderingHint设置抗锯齿等渲染效果。
通过以上方法,可以在 Java Swing 中实现各种图形的绘制和动态更新。






