JFreeChart 快速指南



JFreeChart - 概述

圖表是資訊的圖形化表示。有多種工具可用於建立不同型別的圖表。JFreeChart 專案由 David Gilbert 於 2000 年 2 月建立。如今,它是 Java 開發人員中使用最廣泛的圖表庫。

本教程將幫助您瞭解 JFreeChart 究竟是什麼,為什麼需要它,以及在基於 Java 的應用程式或獨立應用程式中建立不同型別圖表的各種方法。

什麼是 JFreeChart?

JFreeChart 是一個用 Java 開發的開源庫。它可以用於基於 Java 的應用程式中建立各種圖表。使用 JFreeChart,我們可以建立所有主要的 2D 和 3D 圖表型別,例如餅圖、柱狀圖、折線圖、XY 圖表和 3D 圖表。

為什麼選擇 JFreeChart?

JFreeChart 是開源且 100% 免費的,允許在商業應用程式中使用而無需任何費用。我們在此列出了一些支援您應該使用 JFreeChart 的更多理由:

  • 它附帶完善的 API 文件,使其易於理解。

  • 它支援各種圖表型別,例如餅圖、折線圖、柱狀圖、面積圖和 3D 圖表。

  • JFreeChart 易於擴充套件,可用於客戶端和伺服器端應用程式。

  • 它支援多種輸出格式,例如 PNG、JPEG、PDF、SVG 等。

  • 它允許對圖表進行廣泛的自定義。

假設您正在開發一個應用程式,並且需要以圖表的形式顯示資料,並且資料本身是動態填充的。在這種情況下,使用 JFreeChart 程式設計以圖表形式顯示資料非常簡單。

JFreeChart - 安裝

JFreeChart 以其高效的圖表建立和使用者友好的安裝設定而聞名。本章介紹在 Windows 和 Linux 上設定 JFreeChart 的過程。安裝 JFreeChart 需要使用者管理。

系統要求

JDK 1.5 或更高版本
記憶體 2GB RAM
磁碟空間 無最低要求
作業系統版本 Linux 或 Windows

安裝 JFreeChart

安裝 JFreeChart 包括以下三個步驟:

JFreeChart Steps

步驟 1:驗證 Java 安裝

要驗證 Java 安裝,請開啟控制檯並執行以下 java 命令:

作業系統 任務 命令
Windows 開啟命令控制檯 C:>java -version
Linux 開啟命令終端 $java -version

如果 Java 安裝正確,則兩個作業系統都應該獲得以下輸出:

序號 作業系統和說明
1

Windows

java version "1.7.0_60" Java(TM) SE Runtime Environment (build 1.7.0_60-b19) Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

2

Linux

java version "1.7.0_25" OpenJDK Runtime Environment (rhel2.3.10.4.el6_4-x86_64) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

如果您尚未安裝 Java,請從以下連結安裝 Java 軟體開發工具包 (SDK):

https://www.oracle.com/technetwork/java/javase/downloads/index.html

我們假設您已安裝 Java 1.7.0_60 版本,然後再進行本教程。

步驟 2:設定 JAVA 環境

設定JAVA_HOME環境變數以指向 Java 安裝在您機器上的基本目錄位置。例如:

序號 作業系統和說明
1

Windows

將環境變數 JAVA_HOME 設定為 C:\ProgramFiles\java\jdk1.7.0_60

2

Linux

export JAVA_HOME=/usr/local/java-current

將 Java 編譯器位置新增到系統路徑。

序號 作業系統和說明
1

Windows

將字串 ;C:\Program Files\Java\jdk1.7.0_60\bin 附加到系統變數 PATH 的末尾。

2

Linux

export PATH=$PATH:$JAVA_HOME/bin/

如上所述,驗證命令提示符中的java -version命令。

步驟 3:安裝 JFreeChart

從以下連結下載最新版本的 JFreeChart.zip:http://www.jfree.org/jfreechart/download/ 將下載的檔案解壓縮到任何位置,然後可以將所需的庫連結到您的 Java 程式中。下圖顯示了目錄和檔案的結構:

JFreeChart

將 jfreechart-1.0.18.jar 和 jcommon-1.0.22.jar 檔案的完整路徑新增到 CLASSPATH,如下所示:

序號 作業系統和說明
1

Windows

將字串“C:\ jfreechart-1.0.18\lib\ jfreechart-1.0.18.jar”和“C:\ jfreechart-1.0.18\lib\ jcommon-1.0.22.jar”附加到使用者變數 CLASSPATH 的末尾

2

Linux

Export CLASSPATH=$CLASSPATH: /usr/share/jfreechart1.0.18/lib/jfreechart-1.0.18.jar: /usr/share/jfreechart-1.0.18/lib/jcommon1.0.22.jar

注意 - 為了與 MySql 資料庫通訊,您還需要將類路徑設定為mysql-connector-java-5.0.8-bin.jar

JFreeChart - 架構

本章介紹 JFreeChart 的基本類級別和應用程式級別架構,讓您瞭解 JFreeChart 如何與不同的類互動以及它如何在基於 Java 的應用程式中執行。

類級別架構

類級別架構解釋了庫中的各種類如何相互互動以建立各種型別的圖表。

JFreeChart Class Level Architecture

以下是上述框圖中使用的單元的詳細資訊:

序號 單元和說明
1

檔案

包含使用者輸入的源,用於在檔案中建立資料集。

2

資料庫

包含使用者輸入的源,用於在資料庫中建立資料集。

3

建立資料集

接受資料集並將資料集儲存到資料集物件中。

4

通用資料集

此型別的資料集主要用於餅圖。

5

類別資料集

此型別的資料集用於柱狀圖、折線圖等。

6

系列資料集

此型別的資料集用於儲存一系列資料並構建折線圖。

7

系列集合資料集

將不同類別的系列資料集新增到系列集合資料集中。此型別的資料集用於 XY 折線圖。

8

建立圖表

這是執行以建立最終圖表的執行方法。

9

框架/影像

圖表顯示在 Swing 框架上或建立影像。

應用程式級別架構

應用程式級別架構解釋了 JFreeChart 庫在 Java 應用程式中的位置。

JFreeChart Application Level Architecture

客戶端程式接收使用者資料,然後根據需求使用標準 Java 和 JFreeChart API 生成輸出,輸出形式可以是直接在應用程式或獨立顯示的框架,也可以是 JPEG 或 PNG 等影像格式。

JFreeChart - 參考 API

在本章中,我們將討論 JFreeChart 庫中一些重要的包、類和方法。在使用 JFreeChart 庫建立各種圖表時,這些包、類和方法最常用。

ChartFactory 類

ChartFactory 是org.jfree.chart包下的抽象類。它提供了一組用於生成標準圖表的實用程式方法。

以下是一些重要方法的列表:

類建構函式

序號 說明
1

ChartFactory()

ChartFactory 類的預設建構函式。

類方法

序號 方法和說明
1

createPieChart(java.lang.String title, PieDataset dataset, boolean legend, boolean tooltips, boolean urls)

此方法使用預設設定建立餅圖。它返回 JFreeChart 型別物件。

2

createPieChart3D(java.lang.String title, PieDataset dataset, boolean legend, boolean tooltips, boolean urls

此方法使用指定的資料集建立 3D 餅圖。

3

createBarChart(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)

引數 java.lang.String categoryAxisLabel 是放置在 X 軸上的值的標籤。引數 java.lang.String valueAxisLabel 是放置在 Y 軸上的值的標籤。

此方法建立一個柱狀圖。

4

createBarChart3D(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)

此方法建立一個具有 3D 效果的柱狀圖。它返回 JFreeChart 型別物件。

5

createLineChart(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)

此方法使用預設設定建立折線圖。

6

createLineChart3D(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)

此方法建立一個具有 3D 效果的折線圖。

7

createXYLineChart(java.lang.String title, java.lang.String xAxisLabel, java.lang.String yAxisLabel, XYDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)

此方法基於 XYDataset 建立具有預設設定的折線圖。

ChartFrame 類

org.jfree.chart 包下的 ChartFrame 類提供所有與框架相關的功能和實用程式。ChartFrame 類繼承自父類,例如 Frame、Window、Container 和 Component 類。

類建構函式

序號 建構函式和說明
1

ChartFrame (java.lang.Frame String, JFreeChart chart)

它構造一個框架。

2

Chart Frame (java.lang.Frame String, JFreeChart chart, boolean scrollpane)

它構造一個框架。

類方法

序號 方法和說明
1

getChartPanel()

此方法返回框架的圖表面板。

ChartPanel 類

org.jfree.chart包中的 ChartPanel 類用作顯示 JFreeChart 物件的 Swing GUI 元件。

類建構函式

序號 建構函式和說明
1

ChartPanel(JFreeChart chart)

此建構函式構造一個顯示指定圖表的panel。

2

ChartPanel(JFreeChart chart, boolean useBuffer)

此建構函式構造一個包含圖表的panel。

3

ChartPanel(JFreeChart chart, boolean properties, boolean save, boolean print, boolean zoom, boolean tooltips)

此建構函式構造一個 JFreeChart 面板。

類方法

序號 方法和說明
1

setPreferredSize(java.awt.Dimension)

此方法用於使用 java.awt.Dimension 類物件作為引數設定框架大小。此方法取自 javax.swing.JComponent。

ChartUtilities 類

org.jfree.chart包中的 ChartUtilities 類提供了一組 JFreeCharts 的實用程式方法,包括將圖表轉換為 PNG、JPEG 等影像檔案格式以及建立 HTML 影像地圖的方法。

類建構函式

序號 建構函式和說明
1

ChartUtilities()

這是類的預設建構函式

類方法

序號 方法和說明
1

saveChartAsPNG(java.io.File file, JFreeChart chart, int width, int height)

此方法將圖表轉換為 PNG 格式並儲存到指定的檔案中。

2

saveChartAsJPEG(java.io.File file, JFreeChart chart, int width, int height)

此方法將圖表轉換為 JPEG 格式並儲存到指定的檔案中。

JFreeChart 類

JFreeChart 類是org.jfree.chart包下的核心類。此類提供 JFreeChart 方法來建立柱狀圖、折線圖、餅圖和 xy 圖表(包括時間序列資料)。

類建構函式

序號 建構函式和說明
1

JFreeChart(Plot plot)

此建構函式基於提供的繪圖建立一個新的圖表。

2

JFreeChart(java.lang.String title, java.awt.Font titleFont, Plot plot, boolean createLegend)

此建構函式使用給定的標題和繪圖建立一個新的圖表。

3

JFreeChart(java.lang.String title, Plot plot)

此建構函式使用給定的標題和繪圖建立一個新的圖表。

類方法

序號 方法和說明
1

getXYPlot()

此方法將圖表繪圖返回為XYPlot。使用 XYPlot,我們可以在 xy 圖表上進行一些實用程式操作。

PiePlot 類

此類是org.jfree.chart.plot包的一部分,並擴充套件了同一包中的 Plot 類。此類提供建立餅圖的方法。

類建構函式

序號 建構函式和說明
1

PiePlot()

它建立一個新的繪圖。

2

PiePlot(PieDataset dataset)

此方法建立一個繪圖,為指定的資料集繪製餅圖。

類方法

序號 方法和說明
1

setStartAngle(double angle)

此方法設定起始角度,並向所有已註冊的監聽器傳送 PlotChangeEvent。

PiePlot3D 類

PiePlot3D 類是同包下 PiePlot 類的子類。因此,此類具有與 PiePlot 類相同的特性,只是它用於建立 3D 繪圖。

類建構函式

序號 建構函式和說明
1

PiePlot3D()

此建構函式建立一個沒有資料集的新例項。

2

PiePlot3D(PieDataset dataset)

此建構函式使用指定的資料集建立一個具有三維效果的餅圖。

類方法

序號 方法和說明
1

setForegroundAlpha(float alpha)

此方法設定繪圖的 alpha 透明度,並向所有已註冊的監聽器傳送 PlotChangeEvent。此方法來自父 Plot 類之一。

2

setInteriorGap(double percent)

此方法設定內部間隙,並向所有已註冊的監聽器傳送 PlotChangeEvent。它控制餅圖邊緣與繪圖區域本身(即,顯示扇區標籤的區域)之間的空間。此方法來自父類 PiePlot。

PlotOrientation 類

這是一個可序列化的類,位於 **org.jfree.chart.plot** 包中,用於顯示二維繪圖的方向。方向可以是 **垂直** 或 **水平**。它設定 Y 軸的方向。常規繪圖具有垂直的 Y 軸。

欄位摘要

序號 型別 欄位和描述
1 PlotOrientation **HORIZONTAL** 對於範圍軸(Y 軸)為水平的繪圖。
2 PlotOrientation **VERTICAL** 對於範圍軸(Y 軸)為垂直的繪圖。這是預設方向。

類方法

序號 方法和說明
1

isHorizontal()

如果此方向為 HORIZONTAL,則此方法返回 true,否則返回 false。

2

isVertical()

如果此方向為 VERTICAL,則此方法返回 true,否則返回 false。

XYPlot 類

這是一個通用的類,位於 **org.jfree.chart.plot** 包中,用於繪製 (x,y) 對形式的資料。此繪圖可以使用實現 XYDataSet 介面的任何其他類的資料。XYPlot 使用 XYItemRenderer 繪製繪圖上的每個點。

類建構函式

序號 建構函式和說明
1

XYPlot()

此建構函式建立一個沒有資料集、沒有軸和沒有渲染器的新 XYPlot 例項。

2

**XYPlot(XYDataset dataset, ValueAxis** domainAxis, **ValueAxis** rangeAxis, **XYItemRenderer** renderer)

此建構函式使用指定的資料集、軸和渲染器建立一個新的繪圖。

類方法

序號 方法和說明
1

**setRenderer(XYItemRenderer** renderer)

此方法設定主資料集的渲染器,並向所有已註冊的監聽器傳送更改事件。

NumberAxis 類

此類位於 **org.jfree.chart.axis** 包中,可以訪問任何軸的數值資料。當我們將任何軸的範圍設定為預設值時,它會根據資料的範圍進行調整。但是,使用 NumberAxis 類,我們可以設定域和範圍軸的下邊距和上邊距。

類建構函式

序號 建構函式和說明
1

NumberAxis( )

這是 NumberAxis 的預設建構函式。

2

NumberAxis( java.lang.String label)

NumberAxis 建構函式在必要時使用預設值。

類方法

序號 方法和說明
1

setLowerMargin(double margin)

此方法設定軸的下邊距(作為軸範圍的百分比),並向所有已註冊的監聽器傳送 **AxisChangeEvent**。此方法來自 ValueAxis 類的父類。

2

setUpperMargin(double margin)

此方法設定軸的上邊距(作為軸範圍的百分比),並向所有已註冊的監聽器傳送 **AxisChangeEvent**。此方法也存在於 ValueAxis 類中。

XYLineAndShapeRenderer 類

此類位於 **org.jfree.chart.renderer.xy** 包下,負責用線連線資料點並在每個資料點處繪製形狀。此渲染器類設計用於與 **XYPlot** 類一起使用。

類建構函式

序號 建構函式和描述
1

XYLineAndShapeRenderer()

此方法建立一個新的渲染器,其中線條和形狀都可見。

2

**XYLineAndShapeRenderer** (boolean lines, boolean shapes)

此方法建立一個具有特定屬性的新渲染器。

類方法

序號 方法和說明
1

setSeriesPaint(int series, java.awt.Paint paint)

此方法設定用於系列的繪製顏色,並向所有已註冊的監聽器傳送 **RendererChangeEvent**。此方法來自 JFreeChart API 渲染器包中的 AbstratRenderer 抽象類。

2

setSeriesStroke(int series, java.awt.Stroke stroke)

此方法設定用於系列的筆觸,並向所有已註冊的監聽器傳送 **RendererChangeEvent**。此方法來自 AbstratRenderer 抽象類,它是此包的超類。

XYItemRenderer 通用資料集

這是一個介面,用於渲染 XYPlot 上單個 (x, y) 專案的格式。該包是 **org.Jfree.data.general**,其中包含用於定義不同型別的資料集以構建圖表 的類和介面。

PieDataset

這是一個用作通用資料集的介面,其中值與鍵相關聯。顧名思義,您可以使用此資料集為餅圖提供資料。此介面擴充套件了 KeyedValues 和 DataSet 介面。此介面使用的方法均來自 KeyedValues、Values 和 Dataset 介面。

DefaultPieDataset 類

這是 PieDataset 介面的預設實現類。

類建構函式

序號 建構函式和說明
1

DefaultPieDataset()

此建構函式建立一個新的資料集,最初為空。

2

DefaultPieDataset(KeyedValues data)

它透過從 **KeyedValues** 例項複製資料來建立一個新的資料集。

類方法

序號 方法和描述
1

setValue(java.lang.Comparable key, double value)

此方法設定鍵的資料值,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

2

setValue(java.lang.Comparable key, java.lang.Number value)

此方法設定鍵的資料值,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

SeriesException 類

這是一個異常類。它引發了在資料集資料的時間序列中發生的異常。在出現重複或無效資料時會引發異常。時間序列不能應用重複項,並且格式必須有效。

DefaultCategoryDataset

這是 CategoryDataset 介面的預設實現類。

類建構函式

序號 建構函式和說明
1

DefaultCategoryDataset()

此建構函式建立一個新的空資料集。

類方法

序號 方法和說明
1

addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法使用可比較的鍵向表新增值。

2

addValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法向表新增值。

3

setValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法新增或更新表中的值,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

4

setValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法新增或更新表中的值,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

有關各種其他方法和欄位的更多資訊,請參閱 JFreeChart API。

系列資料集

系列資料集由 XY 圖表使用。該包是 **org.Jfree.data.xy**,其中包含屬於 xy 圖表的類和介面。核心介面是 XYDataset。

XYDataset

這是一個介面,可以透過它訪問 (x,y) 專案形式的資料。顧名思義,您可以使用此資料集來服務 XY 圖表。此介面中的某些方法來自 SeriesDateset 介面。

XYZDataset

這是一個介面,可以透過它訪問 (x,y,z) 專案形式的資料。顧名思義,您可以使用此資料集來服務 XYZ 圖表。此介面中的某些方法來自 SeriesDateset。

XYSeries

這是一個類,它表示 (x, y) 形式的一個或多個數據項的序列。預設情況下,系列中的專案按 x 值升序排序,並允許重複的 x 值。排序和重複預設值都可以在建構函式中更改。Y 值可以表示為 null 以表示缺失值。

類建構函式

序號 建構函式和說明
1

XYSeries(java.lang.Comparable key)

此建構函式建立一個新的空系列。

2

XYSeries(java.lang.Comparable key, boolean autoSort)

它構造一個新的空系列,自動排序標誌按要求設定,並允許重複值。

3

XYSeries(java.lang.Comparable key, boolean autoSort, boolean allowDuplicateXValues)

它構造一個不包含資料的新的 xy 系列。

類方法

序號 方法和說明
1

add(double x, double y)

此方法將資料項新增到系列中。

上述方法在教程示例中使用。如果您想了解其餘的方法和欄位,請參閱 JFreeChart API。

XYSeriesCollection

XYSeriesCollection 類的父類包括 AbstractIntervelDataset、AbstractXYDatset、AbstractSeriesDataset 和 AbstractDataset。此類中的一些方法屬於此類的父類。

類建構函式

序號 建構函式和說明
1

XYSeriesCollection()

它構造一個空資料集。

2

XYSeriesCollection(XYSeries xyseries)

它構造一個數據集並使用單個系列填充它。

類方法

序號 方法和說明
1

addSeries(XYSeries series)

此方法向集合新增一個系列,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

有關其餘方法和欄位,請參閱 JFreeChart API。

Default XYZDataset

DefaultXYZDataset 類的父類包括 AbstractIntervelDataset、AbstractXYDatset、AbstractSeriesDataset、AbstractDataset 和 AbstractXYZDataset。此類中的一些方法屬於此類的父類。

類建構函式

序號 建構函式和說明
1

DefaultXYZDataset()

它構造一個空資料集。

類方法

序號 方法和說明
1

addSeries(java.lang.Comparable seriesKey, double[ ][ ] data )

此方法向集合新增一個系列,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

有關其餘方法和欄位,請參閱 JFreeChart API。

JFreeCharts 中的時間序列

該包是 **org.jfree.data.time**。此包包含用於時間相關資料的類和介面。

TimeSeries

此類表示週期值形式的資料項序列,其中週期是 RegularTimePeriod 抽象類的某個例項,例如 Time、Day、Hour、Minute 和 Second 類。

類建構函式

序號 建構函式和說明
1

TimeSeries(java.lang.Comparable name)

它建立一個新的空系列。

2

TimeSeries(java.lang.Comarable name, java.lang.String domain, java.lang.Strin range)

它建立一個不包含資料的新的時間序列。

類方法

序號 方法和說明
1

add(RegularTimePeriod period,double value)

此方法向系列新增新的資料項。

有關其餘方法和欄位,請參閱 JFreeChart API。

TimeSeriesCollection

這是一個用作時間序列物件集合的類。此類實現了XYDataset介面,並擴充套件了IntervelXYDataset介面。這使得收集序列資料物件非常方便。

類建構函式

序號 建構函式和說明
1

TimeSeriesCollection()

它構造一個空資料集,繫結到預設時區。

2

TimeSeriesCollection(TimeSeries series)

它構造一個包含單個序列(可以新增更多)的資料集,繫結到預設時區。

3

TimeSeriesCollection(TimeSeries series, java.util.TimeZone zone)

它構造一個包含單個序列(可以新增更多)的資料集,繫結到特定時區。

4

TimeSeriesCollection(java.util.TimeZone zone)

它構造一個空資料集,繫結到特定時區。

類方法

序號 方法和說明
1

addSeries(TimeSeries series)

此方法向集合新增一個系列,並向所有已註冊的監聽器傳送 **DatasetChangeEvent**。

有關其餘方法和欄位,請參閱 JFreeChart API。

此類表示特定日期中的秒。此類是不可變的,這是所有RegularTimePeriod子類的要求。

類建構函式

序號 建構函式和說明
1

Second()

它基於系統日期/時間構造一個新的Second物件。

2

Second(java.util.Date time)

它根據指定的日期/時間和預設時區構造一個新例項。

3

Second(java.util.Date time, java.util.TimeZone zone, java.util.Locale locale)

它根據提供的時間和時區建立一個新的秒物件。

4

Second(int second, int minute, int hour, int day, int month, int year)

它建立一個新的秒物件。

5

Second(int second, Minute minute)

它構造一個新的Second物件。

類方法

序號 方法和說明
1

getSecond()

它返回分鐘內的秒數。

2

next()

它返回當前秒之後的下一秒。

有關其餘方法和欄位,請參閱 JFreeChart API。

JFreeCharts中的框架

包為org.jfree.ui。這是屬於JFreeChart的JCommons API的包。它包含用於為預配置圖表建立框架的實用程式類。

ApplicationFrame

這是用於建立簡單應用程式主框架的基類。框架偵聽視窗關閉事件,並透過關閉JVM來響應。對於小型演示應用程式來說,這很好。對於企業應用程式,您需要使用更強大的工具。此類中的主要核心方法取自Component、Container、Window、Frame和Jframe類。

類建構函式

序號 建構函式和描述
1

ApplicationFrame(java.lang.String title)

它使用字串標題建立一個應用程式框架。

此類有助於建立AWT框架。這就是為什麼我們在本教程示例中使用此類作為超類的理由。

從父類中獲取的方法用於開啟框架、關閉框架、更改大小、更改背景或前景色以及監聽器。

RefineryUtilities

這是一個與使用者介面相關的實用程式方法集合類。

類方法

序號 方法和說明
1

centerFrameOnScreen(java.awt.Window frame)

它將指定的框架定位在螢幕中央。

上述方法在本教程示例中使用。有關其餘方法和欄位,請參閱JFreeChart API。

JFreeChart - 餅圖

在餅圖中,每個扇區的弧長與其代表的數量成正比。本章演示瞭如何使用JFreeChart從給定的業務資料集中建立餅圖

業務資料

以下示例使用餅圖描述手機銷售情況。以下是不同手機品牌及其銷量(每天單位)的列表。

序號 手機品牌 銷量(每天單位)
1 Iphone 5S 20
2 三星Grand 20
3 MOTO G 40
4 諾基亞Lumia 10

基於AWT的應用程式

以下是使用上述資訊建立餅圖的程式碼。此程式碼可幫助您將餅圖嵌入任何基於AWT的應用程式中。

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
 
public class PieChart_AWT extends ApplicationFrame {
   
   public PieChart_AWT( String title ) {
      super( title ); 
      setContentPane(createDemoPanel( ));
   }
   
   private static PieDataset createDataset( ) {
      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue( "IPhone 5s" , new Double( 20 ) );  
      dataset.setValue( "SamSung Grand" , new Double( 20 ) );   
      dataset.setValue( "MotoG" , new Double( 40 ) );    
      dataset.setValue( "Nokia Lumia" , new Double( 10 ) );  
      return dataset;         
   }
   
   private static JFreeChart createChart( PieDataset dataset ) {
      JFreeChart chart = ChartFactory.createPieChart(      
         "Mobile Sales",   // chart title 
         dataset,          // data    
         true,             // include legend   
         true, 
         false);

      return chart;
   }
   
   public static JPanel createDemoPanel( ) {
      JFreeChart chart = createChart(createDataset( ) );  
      return new ChartPanel( chart ); 
   }

   public static void main( String[ ] args ) {
      PieChart_AWT demo = new PieChart_AWT( "Mobile Sales" );  
      demo.setSize( 560 , 367 );    
      RefineryUtilities.centerFrameOnScreen( demo );    
      demo.setVisible( true ); 
   }
}

讓我們將上面的Java程式碼儲存在PieChart_AWT.java檔案中,然後在命令提示符下編譯並執行它:

$javac PieChart_AWT.java  
$java PieChart_AWT

如果一切正常,它將編譯並執行以生成以下餅圖:

JFreeChart Pie Chart

如果您不需要將圖表嵌入任何應用程式中,則可以在命令提示符下建立圖表影像。JFreeChart允許您將圖表影像儲存為JPG或PNG格式。

JPEG影像建立

讓我們重寫上面的示例,以從命令列生成JPEG影像。以下是JFreeChart庫提供的兩個API,您可以根據需要使用它們來生成PNG或JPEG影像。

  • saveChartAsPNG() - 儲存PNG格式影像的API。

  • saveChartAsJPEG() - 儲存JPEG格式影像的API。

import java.io.*;

import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart {
   
   public static void main( String[ ] args ) throws Exception {
      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue("IPhone 5s", new Double( 20 ) );
      dataset.setValue("SamSung Grand", new Double( 20 ) );
      dataset.setValue("MotoG", new Double( 40 ) );
      dataset.setValue("Nokia Lumia", new Double( 10 ) );

      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales",   // chart title
         dataset,          // data
         true,             // include legend
         true,
         false);
         
      int width = 640;   /* Width of the image */
      int height = 480;  /* Height of the image */ 
      File pieChart = new File( "PieChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG( pieChart , chart , width , height );
   }
}

讓我們將上面的Java程式碼儲存在PieChart.java檔案中,然後在命令提示符下編譯並執行它:

$javac PieChart.java  
$java PieChart

如果一切正常,它將編譯並執行以在當前目錄中建立一個名為PieChart.jpeg的JPEG影像檔案。

JFreeChart - 柱狀圖

本章演示瞭如何使用JFreeChart從給定的業務資料集中建立條形圖

條形圖使用不同方向(水平或垂直)的條形來顯示各個類別中的比較。圖表的其中一個軸(域軸)顯示正在比較的特定域,另一個軸(範圍軸)表示離散值。

業務資料

以下示例使用條形圖描述各種汽車統計資料。以下是汽車品牌及其不同特性的列表,我們將使用條形圖顯示這些特性:

汽車 速度 使用者評分 里程 安全性
菲亞特 1.0 3.0 5.0 5.0
奧迪 5.0 6.0 10.0 4.0
福特 4.0 2.0 3.0 6.0

基於AWT的應用程式

以下是根據上述資訊建立條形圖的程式碼。此程式碼可幫助您將條形圖嵌入任何基於AWT的應用程式中。

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; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 

public class BarChart_AWT extends ApplicationFrame {
   
   public BarChart_AWT( String applicationTitle , String chartTitle ) {
      super( applicationTitle );        
      JFreeChart barChart = ChartFactory.createBarChart(
         chartTitle,           
         "Category",            
         "Score",            
         createDataset(),          
         PlotOrientation.VERTICAL,           
         true, true, false);
         
      ChartPanel chartPanel = new ChartPanel( barChart );        
      chartPanel.setPreferredSize(new java.awt.Dimension( 560 , 367 ) );        
      setContentPane( chartPanel ); 
   }
   
   private CategoryDataset createDataset( ) {
      final String fiat = "FIAT";        
      final String audi = "AUDI";        
      final String ford = "FORD";        
      final String speed = "Speed";        
      final String millage = "Millage";        
      final String userrating = "User Rating";        
      final String safety = "safety";        
      final DefaultCategoryDataset dataset = 
      new DefaultCategoryDataset( );  

      dataset.addValue( 1.0 , fiat , speed );        
      dataset.addValue( 3.0 , fiat , userrating );        
      dataset.addValue( 5.0 , fiat , millage ); 
      dataset.addValue( 5.0 , fiat , safety );           

      dataset.addValue( 5.0 , audi , speed );        
      dataset.addValue( 6.0 , audi , userrating );       
      dataset.addValue( 10.0 , audi , millage );        
      dataset.addValue( 4.0 , audi , safety );

      dataset.addValue( 4.0 , ford , speed );        
      dataset.addValue( 2.0 , ford , userrating );        
      dataset.addValue( 3.0 , ford , millage );        
      dataset.addValue( 6.0 , ford , safety );               

      return dataset; 
   }
   
   public static void main( String[ ] args ) {
      BarChart_AWT chart = new BarChart_AWT("Car Usage Statistics", 
         "Which car do you like?");
      chart.pack( );        
      RefineryUtilities.centerFrameOnScreen( chart );        
      chart.setVisible( true ); 
   }
}

讓我們將上面的Java程式碼儲存在BarChart_AWT.java檔案中,然後在命令提示符下編譯並執行它:

$javac BarChar_AWT.java  
$java BarChart_AWT

如果一切正常,它將編譯並執行以生成以下條形圖:

JFree Chart

JPEG影像建立

讓我們重寫上面的示例,以從命令列生成JPEG影像。

import java.io.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;

public class BarChart {
   
   public static void main( String[ ] args )throws Exception {
      final String fiat = "FIAT";
      final String audi = "AUDI";
      final String ford = "FORD";
      final String speed = "Speed";
      final String millage = "Millage";
      final String userrating = "User Rating";
      final String safety = "safety";

      final DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
      dataset.addValue( 1.0 , fiat , speed );
      dataset.addValue( 3.0 , fiat , userrating );
      dataset.addValue( 5.0 , fiat , millage );
      dataset.addValue( 5.0 , fiat , safety );

      dataset.addValue( 5.0 , audi , speed );
      dataset.addValue( 6.0 , audi , userrating );
      dataset.addValue( 10.0 , audi , millage );
      dataset.addValue( 4.0 , audi , safety );

      dataset.addValue( 4.0 , ford , speed );
      dataset.addValue( 2.0 , ford , userrating );
      dataset.addValue( 3.0 , ford , millage );
      dataset.addValue( 6.0 , ford , safety );

      JFreeChart barChart = ChartFactory.createBarChart(
         "CAR USAGE STATIStICS", 
         "Category", "Score", 
         dataset,PlotOrientation.VERTICAL, 
         true, true, false);
         
      int width = 640;    /* Width of the image */
      int height = 480;   /* Height of the image */ 
      File BarChart = new File( "BarChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG( BarChart , barChart , width , height );
   }
}

讓我們將上面的Java程式碼儲存在BarChart.java檔案中,然後在命令提示符下編譯並執行它:

$javac BarChart.java  
$java BarChart 

如果一切正常,它將編譯並執行以在當前目錄中建立一個名為BarChart.jpeg的JPEG影像檔案。

JFreeChart - 折線圖

折線圖或線形圖將資訊顯示為一系列由直線段連線的資料點(標記)。折線圖顯示資料如何以相等的時間頻率變化。

本章演示瞭如何使用JFreeChart從給定的業務資料集中建立折線圖

業務資料

以下示例繪製了一條折線圖,以顯示從1970年開始不同年份開辦的學校數量的趨勢。

給定的資料如下:

年份 學校數量
1970 15
1980 30
1990 60
2000 120
2013 240
2014 300

基於AWT的應用程式

以下是根據上述資訊建立折線圖的程式碼。此程式碼可幫助您將折線圖嵌入任何基於AWT的應用程式中。

import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class LineChart_AWT extends ApplicationFrame {

   public LineChart_AWT( String applicationTitle , String chartTitle ) {
      super(applicationTitle);
      JFreeChart lineChart = ChartFactory.createLineChart(
         chartTitle,
         "Years","Number of Schools",
         createDataset(),
         PlotOrientation.VERTICAL,
         true,true,false);
         
      ChartPanel chartPanel = new ChartPanel( lineChart );
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
      setContentPane( chartPanel );
   }

   private DefaultCategoryDataset createDataset( ) {
      DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
      dataset.addValue( 15 , "schools" , "1970" );
      dataset.addValue( 30 , "schools" , "1980" );
      dataset.addValue( 60 , "schools" ,  "1990" );
      dataset.addValue( 120 , "schools" , "2000" );
      dataset.addValue( 240 , "schools" , "2010" );
      dataset.addValue( 300 , "schools" , "2014" );
      return dataset;
   }
   
   public static void main( String[ ] args ) {
      LineChart_AWT chart = new LineChart_AWT(
         "School Vs Years" ,
         "Numer of Schools vs years");

      chart.pack( );
      RefineryUtilities.centerFrameOnScreen( chart );
      chart.setVisible( true );
   }
}

讓我們將上面的Java程式碼儲存在LineChart_AWT.java檔案中,然後在命令提示符下編譯並執行它:

$javac LineChart_AWT.java  
$java LineChart_AWT 

如果一切正常,它將編譯並執行以生成以下折線圖:

JFreeChart Line Chart

JPEG影像建立

讓我們重寫上面的示例,以從命令列生成JPEG影像。

import java.io.*;

import org.jfree.chart.JFreeChart; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class LineChart {

   public static void main( String[ ] args ) throws Exception {
      DefaultCategoryDataset line_chart_dataset = new DefaultCategoryDataset();
      line_chart_dataset.addValue( 15 , "schools" , "1970" );
      line_chart_dataset.addValue( 30 , "schools" , "1980" );
      line_chart_dataset.addValue( 60 , "schools" , "1990" );
      line_chart_dataset.addValue( 120 , "schools" , "2000" );
      line_chart_dataset.addValue( 240 , "schools" , "2010" ); 
      line_chart_dataset.addValue( 300 , "schools" , "2014" );

      JFreeChart lineChartObject = ChartFactory.createLineChart(
         "Schools Vs Years","Year",
         "Schools Count",
         line_chart_dataset,PlotOrientation.VERTICAL,
         true,true,false);

      int width = 640;    /* Width of the image */
      int height = 480;   /* Height of the image */ 
      File lineChart = new File( "LineChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG(lineChart ,lineChartObject, width ,height);
   }
}

讓我們將上面的Java程式碼儲存在LineChart.java檔案中,然後在命令提示符下編譯並執行它:

$javac LineChart.java  
$java LineChart

如果一切正常,它將編譯並執行以在當前目錄中建立一個名為LineChart.jpeg的JPEG影像檔案。

JFreeChart - XY 圖表

XY圖表(散點圖)基於一個數據序列,該序列由一個X值和Y值的列表組成。每個值對(X,Y)都是座標系中的一個點。這裡,一個值決定水平(X)位置,另一個值決定垂直(Y)位置。本章演示瞭如何使用JFreeChart從給定的業務資料集中建立XY圖表

業務資料

考慮一個示例,我們想為所有主要瀏覽器建立XY圖表。這裡,從不同類別的人員那裡收集了不同的效能分數,如下所示:

火狐 類別(X) 分數(Y)
1.0 1.0
2.0 4.0
3.0 3.0
Chrome 類別(X) 分數(Y)
1.0 4.0
2.0 5.0
3.0 6.0
IE 類別(X) 分數(Y)
3.0 4.0
4.0 5.0
5.0 4.0

基於AWT的應用程式

以下是根據上述資訊建立XY圖表的程式碼。此程式碼可幫助您將XY圖表嵌入任何基於AWT的應用程式中。

import java.awt.Color; 
import java.awt.BasicStroke; 

import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.xy.XYSeriesCollection; 
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

public class XYLineChart_AWT extends ApplicationFrame {

   public XYLineChart_AWT( String applicationTitle, String chartTitle ) {
      super(applicationTitle);
      JFreeChart xylineChart = ChartFactory.createXYLineChart(
         chartTitle ,
         "Category" ,
         "Score" ,
         createDataset() ,
         PlotOrientation.VERTICAL ,
         true , true , false);
         
      ChartPanel chartPanel = new ChartPanel( xylineChart );
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
      final XYPlot plot = xylineChart.getXYPlot( );
      
      XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer( );
      renderer.setSeriesPaint( 0 , Color.RED );
      renderer.setSeriesPaint( 1 , Color.GREEN );
      renderer.setSeriesPaint( 2 , Color.YELLOW );
      renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
      renderer.setSeriesStroke( 1 , new BasicStroke( 3.0f ) );
      renderer.setSeriesStroke( 2 , new BasicStroke( 2.0f ) );
      plot.setRenderer( renderer ); 
      setContentPane( chartPanel ); 
   }
   
   private XYDataset createDataset( ) {
      final XYSeries firefox = new XYSeries( "Firefox" );          
      firefox.add( 1.0 , 1.0 );          
      firefox.add( 2.0 , 4.0 );          
      firefox.add( 3.0 , 3.0 );          
      
      final XYSeries chrome = new XYSeries( "Chrome" );          
      chrome.add( 1.0 , 4.0 );          
      chrome.add( 2.0 , 5.0 );          
      chrome.add( 3.0 , 6.0 );          
      
      final XYSeries iexplorer = new XYSeries( "InternetExplorer" );          
      iexplorer.add( 3.0 , 4.0 );          
      iexplorer.add( 4.0 , 5.0 );          
      iexplorer.add( 5.0 , 4.0 );          
      
      final XYSeriesCollection dataset = new XYSeriesCollection( );          
      dataset.addSeries( firefox );          
      dataset.addSeries( chrome );          
      dataset.addSeries( iexplorer );
      return dataset;
   }

   public static void main( String[ ] args ) {
      XYLineChart_AWT chart = new XYLineChart_AWT("Browser Usage Statistics",
         "Which Browser are you using?");
      chart.pack( );          
      RefineryUtilities.centerFrameOnScreen( chart );          
      chart.setVisible( true ); 
   }
}

讓我們將上面的Java程式碼儲存在XYLineChart_AWT.java檔案中,然後在命令提示符下編譯並執行它:

$javac XYLineChart_AWT.java  
$java XYLineChart_AWT 

如果一切正常,它將編譯並執行以生成以下XY圖表:

JFreeChart XY Chart

JPEG影像建立

讓我們重寫上面的示例,以從命令列生成JPEG影像。

import java.io.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYSeries;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.chart.ChartUtilities; 

public class XYLineChart_image {

   public static void main( String[ ] args )throws Exception {
      final XYSeries firefox = new XYSeries( "Firefox" );
      firefox.add( 1.0 , 1.0 );
      firefox.add( 2.0 , 4.0 );
      firefox.add( 3.0 , 3.0 );
      
      final XYSeries chrome = new XYSeries( "Chrome" );
      chrome.add( 1.0 , 4.0 );
      chrome.add( 2.0 , 5.0 );
      chrome.add( 3.0 , 6.0 );
      
      final XYSeries iexplorer = new XYSeries( "InternetExplorer" );
      iexplorer.add( 3.0 , 4.0 );
      iexplorer.add( 4.0 , 5.0 );
      iexplorer.add( 5.0 , 4.0 );
      
      final XYSeriesCollection dataset = new XYSeriesCollection( );
      dataset.addSeries( firefox );
      dataset.addSeries( chrome );
      dataset.addSeries( iexplorer );

      JFreeChart xylineChart = ChartFactory.createXYLineChart(
         "Browser usage statastics", 
         "Category",
         "Score", 
         dataset,
         PlotOrientation.VERTICAL, 
         true, true, false);
      
      int width = 640;   /* Width of the image */
      int height = 480;  /* Height of the image */ 
      File XYChart = new File( "XYLineChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG( XYChart, xylineChart, width, height);
   }
}

讓我們將上面的Java程式碼儲存在XYLineChart_image.java檔案中,然後在命令提示符下編譯並執行它:

$javac XYLineChart_image.java  
$java XYLineChart_image

如果一切正常,它將編譯並執行以在當前目錄中建立一個名為XYLineChart.jpeg的JPEG影像檔案。

JFreeChart - 3D餅圖/條形圖

3D圖表是以三維格式顯示的圖表。您可以使用這些圖表來提供更好的顯示和清晰的資訊。3D餅圖與餅圖相同,此外還具有不錯的3D效果。可以透過新增一些額外的程式碼來實現3D效果,這些程式碼將負責在餅圖中建立3D效果。

3D餅圖

考慮以下示例,以使用3D餅圖說明手機銷售情況。以下是不同手機品牌及其銷量(每天單位)的列表。

序號 手機品牌 銷量(每天單位)
1 Iphone 5S 20
2 三星Grand 20
3 MOTO G 40
4 諾基亞Lumia 10

以下是根據上述資訊建立3D餅圖的程式碼。此程式碼可幫助您將餅圖嵌入任何基於AWT的應用程式中。

import java.io.*; 

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PiePlot3D; 
import org.jfree.data.general.DefaultPieDataset; 
import org.jfree.chart.ChartUtilities;

public class PieChart3D {

   public static void main( String[ ] args )throws Exception {
      DefaultPieDataset dataset = new DefaultPieDataset( );             
      dataset.setValue( "IPhone 5s" , new Double( 20 ) );             
      dataset.setValue( "SamSung Grand" , new Double( 20 ) );             
      dataset.setValue( "MotoG" , new Double( 40 ) );             
      dataset.setValue( "Nokia Lumia" , new Double( 10 ) ); 

      JFreeChart chart = ChartFactory.createPieChart3D( 
         "Mobile Sales" ,  // chart title                   
         dataset ,         // data 
         true ,            // include legend                   
         true, 
         false);

      final PiePlot3D plot = ( PiePlot3D ) chart.getPlot( );             
      plot.setStartAngle( 270 );             
      plot.setForegroundAlpha( 0.60f );             
      plot.setInteriorGap( 0.02 );             
      int width = 640;   /* Width of the image */             
      int height = 480;  /* Height of the image */                             
      File pieChart3D = new File( "pie_Chart3D.jpeg" );                           
      ChartUtilities.saveChartAsJPEG( pieChart3D , chart , width , height );   
   }
}

讓我們將上面的Java程式碼儲存在PieChart3D.java檔案中,然後在命令提示符下編譯並執行它:

$javac PieChart3D.java  
$java PieChart3D 

如果一切正常,它將編譯並執行以建立一個名為PieChart3D.jpeg的JPEG影像檔案,其中包含以下3D餅圖:

JFreeChart PieChart3D

3D條形圖

3D條形圖與條形圖相同,此外還具有不錯的3D效果。可以透過新增一些額外的程式碼來實現3D效果,這些程式碼將負責在條形圖中建立3D效果。考慮以下示例,該示例使用3D條形圖描述各種汽車統計資料。以下是汽車品牌及其不同特性的列表,我們將使用條形圖顯示這些特性:

汽車 速度 使用者評分 里程 安全性
菲亞特 1.0 3.0 5.0 5.0
奧迪 5.0 6.0 10.0 4.0
福特 4.0 2.0 3.0 6.0

以下程式碼根據上述資訊建立3D條形圖。此程式碼可幫助您將條形圖嵌入任何基於AWT的應用程式中。

import java.io.*; 

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.chart.ChartUtilities; 

public class BarChart3D {
   
   public static void main( String[ ] args )throws Exception {
      final String fait = "FAIT";              
      final String audi = "AUDI";              
      final String ford = "FORD";              
      final String speed = "Speed";              
      final String popular = "Popular";              
      final String mailage = "Mailage";              
      final String userrating = "User Rating";              
      final String safety = "safety";        
      final DefaultCategoryDataset dataset = new DefaultCategoryDataset( ); 

      dataset.addValue( 1.0 , fait , speed );              
      dataset.addValue( 4.0 , fait , popular );              
      dataset.addValue( 3.0 , fait , userrating );              
      dataset.addValue( 5.0 , fait , mailage );              
      dataset.addValue( 5.0 , fait , safety );              
      
      dataset.addValue( 5.0 , audi , speed );              
      dataset.addValue( 7.0 , audi , popular );              
      dataset.addValue( 6.0 , audi , userrating );              
      dataset.addValue( 10.0 , audi , mailage );              
      dataset.addValue( 4.0 , audi , safety ); 
      
      dataset.addValue( 4.0 , ford , speed );              
      dataset.addValue( 3.0 , ford , popular );              
      dataset.addValue( 2.0 , ford , userrating );              
      dataset.addValue( 3.0 , ford , mailage );              
      dataset.addValue( 6.0 , ford , safety );                 
      
      JFreeChart barChart = ChartFactory.createBarChart3D(
         "Car Usage Statistics",             
         "Category",             
         "Score",             
         dataset,            
         PlotOrientation.VERTICAL,             
         true, true, false);
         
      int width = 640; /* Width of the image */              
      int height = 480; /* Height of the image */                              
      File barChart3D = new File( "barChart3D.jpeg" );                            
      ChartUtilities.saveChartAsJPEG( barChart3D, barChart, width, height);
   }
}

讓我們將上面的Java程式碼儲存在BarChart3D.java檔案中,然後在命令提示符下編譯並執行它:

$javac BarChart3D.java  
$java BarChart3

如果您的環境一切正常,它將編譯並執行,建立一個包含以下3D條形圖的JPEG影像檔案BarChart3D.jpeg

JFreeChart 3D Bar Chart

JFreeChart - 氣泡圖

本章演示如何使用JFreeChart根據給定的業務資料建立氣泡圖。氣泡圖以三維方式顯示資訊。氣泡繪製在(x, y)座標相交的位置。氣泡的大小被視為X軸和Y軸的範圍或數量。

業務資料

讓我們考慮不同的個人,以及他們的年齡、體重和工作能力。工作能力可以視為小時數,在圖表中以氣泡的形式繪製。

體重
年齡 30 40 50 60 70 80
10 4 工作量
20 5
30 10
40 8
50 9
60 6

基於AWT的應用程式

以下是根據上述資訊建立氣泡圖的程式碼。此程式碼可幫助您將氣泡圖嵌入任何基於AWT的應用程式中。

import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.JPanel; 

import org.jfree.chart.*; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.renderer.xy.XYItemRenderer; 
import org.jfree.data.xy.DefaultXYZDataset; 
import org.jfree.data.xy.XYZDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities;
  
public class BubbleChart_AWT extends ApplicationFrame {

   public BubbleChart_AWT( String s ) {
      super( s );                 
      JPanel jpanel = createDemoPanel( );                 
      jpanel.setPreferredSize(new Dimension( 560 , 370 ) );                 
      setContentPane( jpanel ); 
   }

   private static JFreeChart createChart( XYZDataset xyzdataset ) {
      JFreeChart jfreechart = ChartFactory.createBubbleChart(
         "AGE vs WEIGHT vs WORK",                    
         "Weight",                    
         "AGE",                    
         xyzdataset,                    
         PlotOrientation.HORIZONTAL,                    
         true, true, false);
         
      XYPlot xyplot = ( XYPlot )jfreechart.getPlot( );                 
      xyplot.setForegroundAlpha( 0.65F );                 
      XYItemRenderer xyitemrenderer = xyplot.getRenderer( );
      xyitemrenderer.setSeriesPaint( 0 , Color.blue );                 
      NumberAxis numberaxis = ( NumberAxis )xyplot.getDomainAxis( );                 
      numberaxis.setLowerMargin( 0.2 );                 
      numberaxis.setUpperMargin( 0.5 );                 
      NumberAxis numberaxis1 = ( NumberAxis )xyplot.getRangeAxis( );                 
      numberaxis1.setLowerMargin( 0.8 );                 
      numberaxis1.setUpperMargin( 0.9 );
                     
      return jfreechart;
   }

   public static XYZDataset createDataset( ) {
      DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset(); 
      double ad[ ] = { 30 , 40 , 50 , 60 , 70 , 80 };                 
      double ad1[ ] = { 10 , 20 , 30 , 40 , 50 , 60 };                 
      double ad2[ ] = { 4 , 5 , 10 , 8 , 9 , 6 };                 
      double ad3[][] = { ad , ad1 , ad2 };                 
      defaultxyzdataset.addSeries( "Series 1" , ad3 );
                   
      return defaultxyzdataset; 
   }

   public static JPanel createDemoPanel( ) {
      JFreeChart jfreechart = createChart( createDataset( ) );                 
      ChartPanel chartpanel = new ChartPanel( jfreechart );
                       
      chartpanel.setDomainZoomable( true );                 
      chartpanel.setRangeZoomable( true );
                 
      return chartpanel;
   }

   public static void main( String args[ ] ) {
      BubbleChart_AWT bubblechart = new BubbleChart_AWT( "Bubble Chart_frame" );   
      bubblechart.pack( );                 
      RefineryUtilities.centerFrameOnScreen( bubblechart );                 
      bubblechart.setVisible( true ); 
   }
}

讓我們將上面的Java程式碼儲存在BubbleChart_AWT.java檔案中,然後在命令提示符下編譯並執行它:

$javac BubbleChart_AWT.java  
$java BubbleChart_AW 

如果一切正常,它將編譯並執行,生成以下氣泡圖:

JFreeChart Bubble Chart

JPEG影像建立

讓我們重寫上面的示例,以從命令列生成JPEG影像。

import java.io.*;

import java.awt.Color; 

import org.jfree.chart.*; 
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.chart.ChartUtilities;

public class BubbleChart_image {
   
   public static void main( String args[ ] )throws Exception {
      DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset( );
      double ad[ ] = { 30 , 40 , 50 , 60 , 70 , 80 };
      double ad1[ ] = { 10 , 20 , 30 , 40 , 50 , 60 };
      double ad2[ ] = { 4 , 5 , 10 , 8 , 9 , 6 };
      double ad3[ ][ ] = { ad , ad1 , ad2 };
      defaultxyzdataset.addSeries( "Series 1" , ad3 );

      JFreeChart jfreechart = ChartFactory.createBubbleChart(
         "AGE vs WEIGHT vs WORK", 
         "Weight", 
         "AGE", 
         defaultxyzdataset, 
         PlotOrientation.HORIZONTAL, 
         true, true, false);

      XYPlot xyplot = ( XYPlot )jfreechart.getPlot( );
      xyplot.setForegroundAlpha( 0.65F );
      XYItemRenderer xyitemrenderer = xyplot.getRenderer( );
      xyitemrenderer.setSeriesPaint( 0 , Color.blue );
      NumberAxis numberaxis = ( NumberAxis )xyplot.getDomainAxis( );
      numberaxis.setLowerMargin( 0.2 );
      numberaxis.setUpperMargin( 0.5 );
      NumberAxis numberaxis1 = ( NumberAxis )xyplot.getRangeAxis( );
      numberaxis1.setLowerMargin( 0.8 );
      numberaxis1.setUpperMargin( 0.9 );

      int width = 560;   /* Width of the image */
      int height = 370;  /* Height of the image */ 
      File bubbleChart = new File("BubbleChart.jpeg"); 
      ChartUtilities.saveChartAsJPEG(bubbleChart,jfreechart,width,height);
   }
}

讓我們將上面的Java程式碼儲存在BubbleChart_image.java檔案中,然後在命令提示符下編譯並執行它:

$javac BubbleChart_image.java  
$java BubbleChart_image

如果一切正常,它將編譯並執行,在您的當前目錄中建立一個名為BubbleChart.jpeg的JPEG影像檔案。

JFreeChart - 時間序列圖

時間序列圖顯示資料點的序列,這些資料點在相等的時間間隔內變化。本章演示如何使用JFreeChart根據給定的業務資料建立時間序列圖

業務資料

讓我們考慮使用標準Java API Math.random()生成的各種隨機數。我們使用這些數字來生成時間序列圖。您可以為在給定時間間隔內網站發生的錯誤總數生成類似的圖表。

基於AWT的應用程式

以下是根據Math.random()在給定時間間隔內生成的數字建立時間序列圖的程式碼。

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.general.SeriesException; 
import org.jfree.data.time.Second; 
import org.jfree.data.time.TimeSeries; 
import org.jfree.data.time.TimeSeriesCollection; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities;

public class TimeSeries_AWT extends ApplicationFrame {

   public TimeSeries_AWT( final String title ) {
      super( title );         
      final XYDataset dataset = createDataset( );         
      final JFreeChart chart = createChart( dataset );         
      final ChartPanel chartPanel = new ChartPanel( chart );         
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 370 ) );         
      chartPanel.setMouseZoomable( true , false );         
      setContentPane( chartPanel );
   }

   private XYDataset createDataset( ) {
      final TimeSeries series = new TimeSeries( "Random Data" );         
      Second current = new Second( );         
      double value = 100.0;         
      
      for (int i = 0; i < 4000; i++) {
         
         try {
            value = value + Math.random( ) - 0.5;                 
            series.add(current, new Double( value ) );                 
            current = ( Second ) current.next( ); 
         } catch ( SeriesException e ) {
            System.err.println("Error adding to series");
         }
      }

      return new TimeSeriesCollection(series);
   }     

   private JFreeChart createChart( final XYDataset dataset ) {
      return ChartFactory.createTimeSeriesChart(             
         "Computing Test", 
         "Seconds",              
         "Value",              
         dataset,             
         false,              
         false,              
         false);
   }

   public static void main( final String[ ] args ) {
      final String title = "Time Series Management";         
      final TimeSeries_AWT demo = new TimeSeries_AWT( title );         
      demo.pack( );         
      RefineryUtilities.positionFrameRandomly( demo );         
      demo.setVisible( true );
   }
}   

讓我們將上面的Java程式碼儲存在TimeSeries_AWT.java檔案中,然後在命令提示符下編譯並執行它:

$javac TimeSeries_AWT.java  
$java TImeSeries_AWT 

如果一切正常,它將編譯並執行,生成以下時間序列圖:

JFreeChart TimeSeries Chart

JPEG影像建立

讓我們重寫上面的示例,以從命令列生成JPEG影像。

import java.io.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.chart.ChartUtilities;

public class TimeSeriesChart {
   
   public static void main( final String[ ] args )throws Exception {
      final TimeSeries series = new TimeSeries( "Random Data" );
      Second current = new Second();
      double value = 100.0;
      
      for ( int i = 0 ; i < 4000 ; i++ ) {
         
         try {
            value = value + Math.random( ) - 0.5;
            series.add( current , new Double( value ) );
            current = ( Second ) current.next( );
         } catch ( SeriesException e ) {
            System.err.println( "Error adding to series" );
         }
      }
      
      final XYDataset dataset=( XYDataset )new TimeSeriesCollection(series);
      JFreeChart timechart = ChartFactory.createTimeSeriesChart(
         "Computing Test", 
         "Seconds", 
         "Value", 
         dataset,
         false, 
         false, 
         false);
         
      int width = 560;   /* Width of the image */
      int height = 370;  /* Height of the image */ 
      File timeChart = new File( "TimeChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG( timeChart, timechart, width, height );
   }
}

讓我們將上面的Java程式碼儲存在TimeSeriesChart.java檔案中,然後在命令提示符下編譯並執行它:

$javac TimeSeriesChart.java  
$java TimeSeriesChart

如果您的環境一切正常,它將編譯並執行,在您的當前目錄中建立一個名為TimeChart.jpeg的JPEG影像檔案。

JFreeChart - 檔案介面

到目前為止,我們學習瞭如何使用JFreeChart API和靜態資料建立各種型別的圖表。但在生產環境中,資料以具有預定義格式的文字檔案形式提供,或者直接來自資料庫。

本章將解釋如何從給定位置的給定文字檔案中讀取簡單資料,然後使用JFreeChart建立您選擇的圖表。

業務資料

假設我們有一個名為mobile.txt的檔案,其中包含不同的手機品牌及其銷量(每天單位),用簡單的逗號 (,) 分隔:

Iphone 5S, 20   
Samsung Grand, 20   
MOTO G, 40  Nokia  
Lumia, 10 

基於檔案的圖表生成

以下是根據mobile.txt中提供的資訊建立餅圖的程式碼:

import java.io.*; 

import java.util.StringTokenizer; 

import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_File {
   
   public static void main( String[ ] args )throws Exception {
      
      String mobilebrands[ ] = {    
         "IPhone 5s" ,   
         "SamSung Grand" ,   
         "MotoG" ,    
         "Nokia Lumia" 
      };
      
      InputStream in = new FileInputStream( new File( "C:/temp/test.txt" ) );          
      BufferedReader reader = new BufferedReader(new InputStreamReader(in ) );          
      StringBuilder out = new StringBuilder();          
      String line;          
      DefaultPieDataset dataset = new DefaultPieDataset();          

      while (( line = reader.readLine() ) != null ) {
         out.append( line );
      }
      
      StringTokenizer s = new StringTokenizer( out.toString(), "," );
      int i = 0;      
      
      while( s.hasMoreTokens( ) && ( mobilebrands [i] != null ) ) {
         dataset.setValue(mobilebrands[i], Double.parseDouble( s.nextToken( ) ));
         i++;
      }
      
      JFreeChart chart = ChartFactory.createPieChart( 
         "Mobile Sales",    // chart title           
         dataset,           // data           
         true,              // include legend           
         true,           
         false);
      
      int width = 560;    /* Width of the image */          
      int height = 370;   /* Height of the image */                          
      File pieChart = new File( "pie_Chart.jpeg" );                        
      ChartUtilities.saveChartAsJPEG( pieChart, chart, width, height); 
   }
}

讓我們將上面的Java程式碼儲存在PieChart_File.java檔案中,然後在命令提示符下編譯並執行它:

$javac PieChart_File.java  
$java PieChart_File 

如果一切正常,它將編譯並執行,建立一個名為PieChart.jpeg的JPEG影像檔案,其中包含以下圖表。

JFreeChart File Interface

JFreeChart - 資料庫介面

本章解釋如何從資料庫表中讀取簡單資料,然後使用JFreeChart建立您選擇的圖表。

業務資料

假設我們有以下MySQL表mobile_tbl(mobile_brand VARCHAR(100) NOT NULL, unit_sale INT NOT NULL);

假設此表具有以下記錄:

手機品牌 單位銷量
IPhone5S 20
三星Grand 20
MotoG 40
諾基亞Lumia 10

使用資料庫生成圖表

以下是根據MySQL資料庫test_db中提供的mobile_tbl表中的資訊建立餅圖的程式碼。根據您的需求,您可以使用任何其他資料庫。

import java.io.*; 
import java.sql.*; 

import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_DB {
   
   public static void main( String[ ] args )throws Exception {
      
      String mobilebrands[] = {
         "IPhone 5s",   
         "SamSung Grand",   
         "MotoG",            
         "Nokia Lumia" 
      };
      
      /* Create MySQL Database Connection */
      Class.forName( "com.mysql.jdbc.Driver" );
      Connection connect = DriverManager.getConnection( 
         "jdbc:mysql://:3306/jf_testdb" ,     
         "root",     
         "root123");
      
      Statement statement = connect.createStatement( );
      ResultSet resultSet = statement.executeQuery("select * from mobile_data" );
      DefaultPieDataset dataset = new DefaultPieDataset( );
      
      while( resultSet.next( ) ) {
         dataset.setValue( 
         resultSet.getString( "mobile_brand" ) ,
         Double.parseDouble( resultSet.getString( "unit_sale" )));
      }
      
      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales",   // chart title           
         dataset,          // data           
         true,             // include legend          
         true,           
         false );

      int width = 560;    /* Width of the image */
      int height = 370;   /* Height of the image */ 
      File pieChart = new File( "Pie_Chart.jpeg" );
      ChartUtilities.saveChartAsJPEG( pieChart , chart , width , height );
   }
}

讓我們將上面的Java程式碼儲存在PieChart_DB.java檔案中,然後在命令提示符下編譯並執行它:

$javac PieChart_DB.java  
$java PieChart_DB

如果一切正常,它將編譯並執行,建立一個名為Pie_Chart.jpeg的JPEG影像檔案,其中包含以下圖表。

JFreeChart Database Interface
廣告
© . All rights reserved.