本文目录导读:

- JFreeChart(最常用、功能全面)
- JavaFX Charts(现代Java应用推荐)
- ECharts for Java(Web项目推荐)
- XChart(轻量级、简单)
- 选择建议
- 实际项目案例 - 数据库驱动图表
Java中实现图表有多种方式,从简单的轻量级库到复杂的企业级解决方案,以下是几种主流的实现方案及案例:
JFreeChart(最常用、功能全面)
JFreeChart 是 Java 最经典的图表库,支持折线图、柱状图、饼图、散点图等。
Maven依赖
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
折线图案例
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
public class LineChartExample extends JFrame {
public LineChartExample(String title) {
super(title);
// 创建数据集
DefaultCategoryDataset dataset = createDataset();
// 创建图表
JFreeChart chart = ChartFactory.createLineChart(
"月度销售统计", // 图表标题
"月份", // X轴标签
"销售额(万元)", // Y轴标签
dataset, // 数据集
PlotOrientation.VERTICAL,
true, // 显示图例
true, // 生成工具提示
false // 生成URL链接
);
// 设置图表到面板
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800, 600));
setContentPane(chartPanel);
}
private DefaultCategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(120, "销售额", "1月");
dataset.addValue(150, "销售额", "2月");
dataset.addValue(180, "销售额", "3月");
dataset.addValue(210, "销售额", "4月");
dataset.addValue(240, "销售额", "5月");
dataset.addValue(280, "销售额", "6月");
return dataset;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
LineChartExample example = new LineChartExample("JFreeChart 折线图示例");
example.setSize(800, 600);
example.setLocationRelativeTo(null);
example.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
example.setVisible(true);
});
}
}
柱状图案例
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
// 主要代码类似,只需将 createLineChart 改为 createBarChart
JFreeChart chart = ChartFactory.createBarChart(
"各产品销量对比",
"产品名称",
"销量(件)",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
JavaFX Charts(现代Java应用推荐)
JavaFX 内置了强大的图表组件,适合现代Java应用开发。
折线图案例
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class JavaFXLineChart extends Application {
@Override
public void start(Stage stage) {
// 定义坐标轴
CategoryAxis xAxis = new CategoryAxis();
NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("月份");
yAxis.setLabel("销售额(万元)");
// 创建折线图
LineChart<String, Number> lineChart = new LineChart<>(xAxis, yAxis);
lineChart.setTitle("月度销售统计");
// 创建数据集
XYChart.Series<String, Number> series = new XYChart.Series<>();
series.setName("销售额");
series.getData().add(new XYChart.Data<>("1月", 120));
series.getData().add(new XYChart.Data<>("2月", 150));
series.getData().add(new XYChart.Data<>("3月", 180));
series.getData().add(new XYChart.Data<>("4月", 210));
series.getData().add(new XYChart.Data<>("5月", 240));
series.getData().add(new XYChart.Data<>("6月", 280));
lineChart.getData().add(series);
// 显示
Scene scene = new Scene(lineChart, 800, 600);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
饼图案例
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class JavaFXPieChart extends Application {
@Override
public void start(Stage stage) {
// 创建饼图数据
ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList(
new PieChart.Data("产品A", 30),
new PieChart.Data("产品B", 25),
new PieChart.Data("产品C", 20),
new PieChart.Data("产品D", 15),
new PieChart.Data("产品E", 10)
);
// 创建饼图
PieChart pieChart = new PieChart(pieChartData);
pieChart.setTitle("产品销售占比");
// 显示
Scene scene = new Scene(pieChart, 600, 400);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
ECharts for Java(Web项目推荐)
通过Java集成ECharts,适合Web应用。
Maven依赖
<dependency>
<groupId>org.icepear.echarts</groupId>
<artifactId>echarts-java</artifactId>
<version>1.0.2</version>
</dependency>
案例
import org.icepear.echarts.Line;
import org.icepear.echarts.charts.line.LineSeries;
import org.icepear.echarts.serializer.EChartsSerializer;
public class EChartsExample {
public static void main(String[] args) {
// 创建折线图
Line line = new Line()
.setTitle("月度销售统计")
.addXAxis(new String[]{"1月", "2月", "3月", "4月", "5月", "6月"})
.addYAxis()
.addSeries(new LineSeries()
.setName("销售额")
.setData(new Number[]{120, 150, 180, 210, 240, 280}));
// 生成JSON
String json = EChartsSerializer.toJson(line);
System.out.println(json);
// 将JSON传递给前端ECharts渲染
}
}
XChart(轻量级、简单)
适合简单的图表需求,API非常简洁。
Maven依赖
<dependency>
<groupId>org.knowm.xchart</groupId>
<artifactId>xchart</artifactId>
<version>3.8.1</version>
</dependency>
案例
import org.knowm.xchart.*;
import org.knowm.xchart.style.Styler;
import javax.swing.*;
public class XChartExample {
public static void main(String[] args) {
// 创建数据
double[] xData = new double[]{1, 2, 3, 4, 5, 6};
double[] yData = new double[]{120, 150, 180, 210, 240, 280};
// 创建图表
XYChart chart = new XYChartBuilder()
.width(800)
.height(600)
.title("月度销售统计")
.xAxisTitle("月份")
.yAxisTitle("销售额(万元)")
.build();
chart.addSeries("销售额", xData, yData);
// 显示
new SwingWrapper<>(chart).displayChart();
}
}
选择建议
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| JFreeChart | 桌面应用、报表 | 功能全面、文档丰富 | 样式较旧、更新慢 |
| JavaFX Charts | 现代JavaFX应用 | 原生支持、动画效果好 | 需JavaFX环境 |
| ECharts for Java | Web应用 | 交互丰富、视觉效果佳 | 依赖前端渲染 |
| XChart | 简单需求 | API简洁、轻量级 | 功能有限 |
实际项目案例 - 数据库驱动图表
// 从数据库获取数据生成图表
public class DatabaseChartExample {
public JFreeChart createChartFromDatabase(String sql) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
String category = rs.getString("category");
double value = rs.getDouble("value");
dataset.addValue(value, "系列", category);
}
} catch (SQLException e) {
e.printStackTrace();
}
return ChartFactory.createBarChart(
"数据统计分析", "分类", "数值",
dataset, PlotOrientation.VERTICAL, true, true, false
);
}
}
根据你的项目类型(桌面应用/Web应用/报表系统)和具体需求选择合适的方案,对于新项目,推荐使用JavaFX Charts(桌面)或ECharts(Web)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播