如何用java画图
使用 Java 绘图基础
Java 提供了多种绘图方式,主要通过 java.awt 和 javax.swing 包中的类实现。以下是几种常见的绘图方法。
使用 Graphics 类绘图
Graphics 类是 Java AWT 中用于绘图的核心类,可以绘制线条、形状、文本等。

import javax.swing.*;
import java.awt.*;
public class SimpleDrawing extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.drawLine(10, 10, 100, 100); // 画一条线
g.setColor(Color.BLUE);
g.drawRect(50, 50, 100, 80); // 画矩形
g.fillOval(150, 150, 80, 80); // 填充椭圆
}
public static void main(String[] args) {
JFrame frame = new JFrame("Simple Drawing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.add(new SimpleDrawing());
frame.setVisible(true);
}
}
使用 Graphics2D 增强绘图功能
Graphics2D 是 Graphics 的子类,提供了更高级的绘图功能,如旋转、缩放和渐变填充。
import javax.swing.*;
import java.awt.*;
public class Graphics2DDemo extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.GREEN);
g2d.setStroke(new BasicStroke(5)); // 设置线条宽度
g2d.draw(new Rectangle(50, 50, 150, 100));
GradientPaint gradient = new GradientPaint(100, 100, Color.RED, 200, 200, Color.YELLOW);
g2d.setPaint(gradient);
g2d.fill(new Ellipse2D.Double(100, 100, 150, 150));
}
public static void main(String[] args) {
JFrame frame = new JFrame("Graphics2D Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.add(new Graphics2DDemo());
frame.setVisible(true);
}
}
使用 BufferedImage 进行离屏绘图
BufferedImage 允许在内存中创建图像并进行操作,适合复杂绘图或图像处理。

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
public class BufferedImageDemo extends JPanel {
private BufferedImage image;
public BufferedImageDemo() {
image = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, 200, 200);
g2d.setColor(Color.BLUE);
g2d.drawString("Hello, Java!", 50, 100);
g2d.dispose();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 50, 50, this);
}
public static void main(String[] args) {
JFrame frame = new JFrame("BufferedImage Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.add(new BufferedImageDemo());
frame.setVisible(true);
}
}
使用 JavaFX 绘图
JavaFX 提供了更现代的绘图 API,适合创建复杂的图形和动画。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class JavaFXDrawing extends Application {
@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
Line line = new Line(10, 10, 100, 100);
line.setStroke(Color.RED);
pane.getChildren().add(line);
Rectangle rect = new Rectangle(50, 50, 100, 80);
rect.setFill(Color.BLUE);
pane.getChildren().add(rect);
Circle circle = new Circle(150, 150, 40);
circle.setFill(Color.GREEN);
pane.getChildren().add(circle);
Scene scene = new Scene(pane, 300, 300);
primaryStage.setTitle("JavaFX Drawing");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
绘图库和工具
对于更复杂的绘图需求,可以使用第三方库如 JFreeChart(图表绘制)或 Processing(创意编程)。
// 使用 JFreeChart 绘制柱状图
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
public class JFreeChartDemo extends JFrame {
public JFreeChartDemo() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series 1", "Category 1");
dataset.addValue(20, "Series 1", "Category 2");
dataset.addValue(30, "Series 1", "Category 3");
JFreeChart chart = ChartFactory.createBarChart(
"Bar Chart Demo", "Category", "Value", dataset);
ChartPanel panel = new ChartPanel(chart);
setContentPane(panel);
}
public static void main(String[] args) {
JFreeChartDemo demo = new JFreeChartDemo();
demo.setSize(500, 400);
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.setVisible(true);
}
}
以上方法涵盖了从基础到高级的 Java 绘图技术,适用于不同的需求和场景。





