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

JFreeChart 入門教學(一):打造第一個長條圖完整實戰

     編輯:Java 相關知識

JFreeChart 入門教學(一):打造第一個長條圖完整實戰

專案需求引入 JFreeChart 與 iText,官方文檔範例僅一個 Jar 且結構混亂,網上範例多為港台術語(如「陣列」即 Array)。本文整理第一個長條圖完整範例,拆解四大核心步驟,助你快速上手。

環境準備

  • 官網:JFreeChart | API 文檔
  • 版本:jfreechart-1.0.0(含 jcommon 依賴)
  • 將 Jar 加入 Classpath,IDE 建立專案即可開始。

核心四步驟架構

  1. 建立 Dataset:封裝圖表數據。
  2. 創建 JFreeChart 物件:透過 ChartFactory 依數據產生圖表模型。
  3. 客製化圖表:調整標題、坐標軸、圖例、工具提示等視覺屬性。
  4. 顯示圖表:用 ChartPanel(繼承 JPanel)嵌入 Swing 視窗。

完整代碼:HelloBarChart.java

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; }
}

Dataset 兩種建構方式

方式 A:DefaultCategoryDataset 逐筆加值

DefaultCategoryDataset ds = new DefaultCategoryDataset();
ds.addValue(value, rowKey, columnKey); // rowKey=系列,columnKey=分類

方式 B:DatasetUtilities 由陣列批次建構

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 適合大量數據、矩陣來源,代碼更簡潔。

ChartFactory.createBarChart 參數詳解

參數說明
title圖表標題
categoryAxisLabelX 軸(分類軸)標籤
valueAxisLabelY 軸(數值軸)標籤
datasetCategoryDataset 實例
orientationPlotOrientation.VERTICAL / HORIZONTAL
legend是否顯示圖例
tooltips是否啟用滑鼠懸停提示
urls是否生成圖片映射 URL

ChartPanel 顯示關鍵

ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270)); // 設定建議大小
getContentPane().add(chartPanel); // 加入 JFrame
pack(); setVisible(true);

ChartPanel 封裝了滾動、縮放、列印、屬性編輯等互動功能,視需求可調整建構子參數啟用/停用。

下一步預告

下篇將實作「堆疊長條圖」、「3D 效果」、「動態數據更新」等進階主題。掌握本文四步驟核心流程,即可靈活擴展各類圖表。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved