首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JFreeChart 核心物件關係解析:Chart、Plot、Dataset、Renderer 三層架構

     編輯:Java 相關知識

JFreeChart 是優秀的開源 2D 圖表庫,但文檔匱乏。本文梳理其核心物件協作關係:JFreeChart 為頂層容器,Plot 負責圖形邏輯,Renderer 封裝 Graphics2D 繪製細節,Dataset 提供資料來源。理解三層解耦設計,即可靈活組合各類圖表。

三大核心介面

物件組裝流程

  1. 建立 Dataset 實例並填入資料
  2. 建立對應 Plot,注入 Dataset
  3. 建立 JFreeChart,注入 Plot (與標題、圖例設定)
  4. 輸出: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 即成為得心應手的圖表利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
角色核心類別/介面職責
Chart 容器JFreeChart標題、圖例、背景、輸出設定
繪圖邏輯Plot (如 PiePlot, XYPlot, CategoryPlot)座標系、軸、資料到視覺映射
繪製工具Renderer (如 PieItemRenderer, XYLineAndShapeRenderer)實際 Graphics2D 繪製邏輯
資料來源Dataset (如 PieDataset, XYDataset, CategoryDataset)資料結構介面,Plot 透過 Dataset 取值