| 角色 | 核心類別/介面 | 職責 |
| Chart 容器 | JFreeChart | 標題、圖例、背景、輸出設定 |
| 繪圖邏輯 | Plot (如 PiePlot, XYPlot, CategoryPlot) | 座標系、軸、資料到視覺映射 |
| 繪製工具 | Renderer (如 PieItemRenderer, XYLineAndShapeRenderer) | 實際 Graphics2D 繪製邏輯 |
| 資料來源 | Dataset (如 PieDataset, XYDataset, CategoryDataset) | 資料結構介面,Plot 透過 Dataset 取值 |
物件組裝流程
- 建立
Dataset 實例並填入資料
- 建立對應
Plot,注入 Dataset
- 建立
JFreeChart,注入 Plot (與標題、圖例設定)
- 輸出:
ChartUtilities.writeChartAsPNG() 或 Servlet 串流
兩種建立方式對比
A. 工廠方法 (快速原型)
JFreeChart chart = ChartFactory.createPieChart3D(
"2000 GDP分布", dataset, true, false, false);
PiePlot plot = (PiePlot) chart.getPlot(); // 取得 Plot 微調
plot.setLabelGenerator(new StandardPieItemLabelGenerator(
"{0} = {2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance()));
plot.setForegroundAlpha(0.5f);
plot.setNoDataMessage("無資料");
B. 手動組裝 (完全控制)
PiePlot plot = new PiePlot(dataset);
plot.setLabelGenerator(...);
plot.setForegroundAlpha(0.5f);
plot.setNoDataMessage("無資料");
JFreeChart chart = new JFreeChart("",
JFreeChart.DEFAULT_TITLE_FONT, plot, false);
效果相同,手動組裝適合需自訂 Renderer、多 Dataset 組合 (如 DatasetCollection) 的進階場景。
多資料系列圖表
時間序列多條線圖:Plot 接收 DatasetCollection (如 TimeSeriesCollection),內含多個 TimeSeries,各自對應一條曲線。
伺服器端輸出與快取
ChartUtilities → PrintWriter 輸出 PNG/JPEG
ServletUtilities.saveChartAsPNG() 產生暫存檔,回傳檔名給 JSP <img src="...">
- 生命週期綁定 Session 可實現快取,但需注意:Session 過長 → 非即時圖;高併發 → 檔案 I/O 壓力大
- 建議:定時任務產生靜態圖檔、或採用圖表圖片快取庫 (如 Ehcache + 定時刷新)
關鍵心得
- Plot = 圖形設計、Renderer = 繪製工具、Dataset = 填充資料,三者解耦支援任意組合
- 工廠方法內建預設 Renderer/Plot,微調時
getPlot() 強制轉型
- 文檔缺乏時,閱讀原始碼 (Demo 集) 是最快上手途徑
掌握三層架構,JFreeChart 即成為得心應手的圖表利器。
- 上一篇文章: JBuilder 快捷鍵完整速查表:編輯、除錯、導航、視窗管理
- 下一篇文章: Eclipse 3.0 JRE 設定陷阱:Installed JREs 未勾選系統庫導致 JDBC 連線失敗
Copyright ©
程式碼之家 All Rights Reserved