專案需求引入 JFreeChart 與 iText,官方文檔範例僅一個 Jar 且結構混亂,網上範例多為港台術語(如「陣列」即 Array)。本文整理第一個長條圖完整範例,拆解四大核心步驟,助你快速上手。
jfreechart-1.0.0(含 jcommon 依賴)ChartFactory 依數據產生圖表模型。ChartPanel(繼承 JPanel)嵌入 Swing 視窗。package HelloJChart;
import java.awt.Dimension;
import javax.swing.JFrame;
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.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class HelloBarChart extends JFrame {
public HelloBarChart() {
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
chart = customizeChart(chart);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270));
getContentPane().add(chartPanel);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) { new HelloBarChart(); }
// 步驟 1:建立數據集
private CategoryDataset createDataset() {
String series1 = "First", series2 = "Second", series3 = "Third";
String[] categories = {"Category 1","Category 2","Category 3","Category 4","Category 5"};
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.5, series1, categories[0]);
dataset.addValue(4.2, series1, categories[1]);
dataset.addValue(3.0, series1, categories[2]);
dataset.addValue(5.0, series1, categories[3]);
dataset.addValue(5.0, series1, categories[4]);
dataset.addValue(5.5, series2, categories[0]);
dataset.addValue(7.8, series2, categories[1]);
dataset.addValue(6.0, series2, categories[2]);
dataset.addValue(8.0, series2, categories[3]);
dataset.addValue(4.0, series2, categories[4]);
dataset.addValue(4.0, series3, categories[0]);
dataset.addValue(3.0, series3, categories[1]);
dataset.addValue(2.0, series3, categories[2]);
dataset.addValue(3.0, series3, categories[3]);
dataset.addValue(6.0, series3, categories[4]);
return dataset;
}
// 步驟 2:創建圖表
private JFreeChart createChart(CategoryDataset dataset) {
return ChartFactory.createBarChart(
"Hello Bar Chart", // 圖表標題
"Category", // 域軸標籤
"Value", // 數值軸標籤
dataset, // 數據集
PlotOrientation.VERTICAL, // 直向
true, // 顯示圖例
true, // 顯示工具提示
false // 不生成 URL
);
}
// 步驟 3:客製化(此處保留原樣,後續擴充)
private JFreeChart customizeChart(JFreeChart chart) { return chart; }
}
DefaultCategoryDataset ds = new DefaultCategoryDataset();
ds.addValue(value, rowKey, columnKey); // rowKey=系列,columnKey=分類
double[][] data = {{1.0,43.0,35.0,...}, {54.0,75.0,63.0,...}, {41.0,33.0,22.0,...}};
CategoryDataset ds = DatasetUtilities.createCategoryDataset("Series ", "Factor ", data);
方式 B 適合大量數據、矩陣來源,代碼更簡潔。
| 參數 | 說明 |
|---|---|
| title | 圖表標題 |
| categoryAxisLabel | X 軸(分類軸)標籤 |
| valueAxisLabel | Y 軸(數值軸)標籤 |
| dataset | CategoryDataset 實例 |
| orientation | PlotOrientation.VERTICAL / HORIZONTAL |
| legend | 是否顯示圖例 |
| tooltips | 是否啟用滑鼠懸停提示 |
| urls | 是否生成圖片映射 URL |
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270)); // 設定建議大小
getContentPane().add(chartPanel); // 加入 JFrame
pack(); setVisible(true);
ChartPanel 封裝了滾動、縮放、列印、屬性編輯等互動功能,視需求可調整建構子參數啟用/停用。
下篇將實作「堆疊長條圖」、「3D 效果」、「動態數據更新」等進階主題。掌握本文四步驟核心流程,即可靈活擴展各類圖表。