1簡介
JFreeChart是SourceForge.net上的一個開源項目,它的源碼和API都可以免費獲得。JFreeChart的功能非常強大,可以實現餅圖(二維和三維),柱狀圖(水平,垂直),線圖,點圖,時序圖,甘特圖,股票行情圖,混和圖,溫度計圖,刻度圖等常用商用圖表,圖形可以導出成PNG和JPEG格式,同時還可以與PDF和EXCEL關聯,支持對圖形的放大、縮小,支持常見圖形的3D顯示。
2圖形對象的處理
2.1 JFreeChart對象
JFreeChart可以生成很多圖形對象,它的工廠類提供了33個工廠方法用于生成不同的圖形對象(具體的工廠方法可以參見JFreeChart的API手冊或者源碼中的ChartFactory類)。JFreechart對圖形對象的抽象具體化。圖形對象(JFreeChart),由Title(主標題),SubTitle(子標題),Plot(圖形的繪制結構)等幾個主要對象組成。各個組成部分如下圖所示:

這是一個JFreeChart對象,上面的“chart標題”是Title對象,中間區域是Plot對象(包括繪圖區域和坐標軸區域),下面的區域是LegendTitle對象,LegendTitle是一種SubTitle對象。
每個JFreeChart對象只能有1個Title對象,1個Plot對象,可以有多個SubTitle對象。JFreeChart對象可以進行的操作有:背景的設置(背景顏色、背景圖片、透明度等)、邊框的設置(是否可見、筆畫、Paint等)、渲染方式的設置、標題對象的設置、子標題對象的增刪查操作。(本文中的所有操作都不提供代碼級的介紹,可參見API手冊或者源碼)
2.2 主標題對象
主標題對象是TextTitle類型,可以進行的操作有:背景設置、字體設置(字體類型、顏色、內容、對齊方式等操作)、tooltip設置、URL設置。
2.3 Plot對象
Plot對象是圖形的繪制結構對象。JFreeChart中含有很多不同的Plot對象,每一種圖形對象中的Plot對象都在實例化的時候創建。所有的Plot共有的操作有:背景設置(背景顏色、背景圖片、透明度等)、前景透明度設置、無數據存在情況的設置(顯示的字符內容、顯示的字體、顯示的Paint)、放大縮小比例的設置,大部分Plot對象還有設置Datset、設置Renderer對象操作。
JFreeChart中有18種Plot抽象類的具體實現類。Plot的具體實現類主要由以下重要對象組成:Renderer對象(圖形的繪制單元——繪圖域),Datset(圖形的數據源),DomainAxis(區域軸,相當于x軸),RangeAxis(范圍軸,相當于y軸)。
不同的Plot對象組成方式不盡相同,有的不含有Renderer對象,比如CompassPlot、ContourPlot、MultiplePiePlot、PiePlot等,有的不含有DomainAxis、RangeAxis對象,另外除了FastScatterPlot類都含有Datset對象,FastScatterPlot使用float的二維數組充當數據源。尤其說明一點,餅狀圖相關的Plot對象(MultiplePiePlot、PiePlot、PiePlot3D、RingPlot)中都不含有Renderer對象、DomainAxis對象、RangeAxis對象。
一般來說,Datset對象存儲數據模型,Renderer對象存儲顯示模型,Plot對象根據Datset對象、Renderer對象完成畫圖操作。

仍以上面的圖形講解Plot對象的組成。
上圖的中間區域是是一個XYPlot對象。其中的折線部分即是圖形的繪制單元Renderer對象。X軸是DomainAxis,y軸是RangeAxis,其中Datset對象屬于數據模型范疇,是UI不可見對象。該圖中的plot背景色、網格線的各種設置可以通過XYPlot對象本身完成。
下面講解Renderer對象、Axis對象(X軸、y軸都屬于Axis對象),Datset對象在后續章節中專門講解。
2.3.1 Renderer對象
Renderer對象是圖形的繪制單元。JFreeChart提供了兩個接口CategoryItemRenderer和XYItemRenderer、以及1個抽象類AbstractRenderer供具體的Renderer類實現,給出了將近50種具體實現類。
一般來說Renderer對象可進行的操作有:對itemlabel(下圖中的柱狀圖上的紅色數字即為itemlabel的示例)的默認設置(itemlabel的產生方式、是否可見、字體、Paint、正反向itemlabel的位置設置等)、繪制圖形的邊框默認設置(Paint、筆畫、是否可見等)、繪制圖形的默認設置(形狀、筆畫、是否可見、對應的圖例中是否可見等,折線圖還有線條是否可見、折點圖形是否可見、折點圖形是否填充、折點圖形的形狀、對應的圖例中線條是否可見、圖形是否可見、整體是否可見等)、以及對指定itemlabel的設置、指定繪制圖形的設置。可以說和具體繪制的圖形相關的屬性都可以通過Renderer對象設置。

不同的Renderer的實現類實現了不同的顯示方式,在含有Renderer對象的JFreeChart對象中,Renderer對象決定了JFreeChart對象的顯示方式。例如:柱狀圖的Plot對象中默認的Renderer對象是CategoryItemRenderer對象,通過設置Plot對象的Renderer對象為LineAndShapeRenderer,則柱狀圖變為線圖。使用中一般不需要顯式的實例化一個Renderer對象,一般通過JFreeChart對象的Plot對象調用現有的Renderer對象進行重新設置等操作。
2.3.2 Axis對象
JFreeChart提供了兩種類型的坐標軸:CategoryAxis(等級軸)和ValueAxis(值軸),ValueAxis又有3個子類:DateAxis(時間軸)、NumberAxis(數字軸)、PeriodAxis(時期軸)。這些坐標軸還有更詳細的子類,不再一一列舉
Axis對象可進行的操作有:標題的設置(內容、字體、Paint、顯示角度等)、坐標線的設置(筆畫、Paint、是否可見等)、刻度線的設置(是否可見、筆畫、Paint、位于繪圖區域的長度、位于繪圖區域外的長度等)、刻度標示的設置(筆畫、Paint、字體、與軸的距離等)、坐標軸范圍設置等。
CategoryAxis對象還可以進行的操作有:刻度標示間距設置(最小間距、最大間距、指定間距)等。
ValueAxis對象可進行的操作有:軸端設置(顯示的圖形形狀)、范圍設置(是否自動產生范圍、自動產生的最小范圍、最大范圍、指定確定范圍、指定范圍大小等)、間隔設置(是否自動產生間隔、指定間隔)等。
DateAxis對象還有對時間刻度顯示格式的設置操作。
2.4 子標題對象
子標題對象是Title類型的對象,一個JFreeChart可以有多個子標題對象。JFreeChart提供了5種Title的實現,可以是圖片、文本、圖例等的形式。
2.5數據源處理
JFreeChart中的數據源是DataSet接口類型。該接口有三個主要的子類接口:CategoryDataset、PieDataset、SeriesDataset
CategoryDataset接口的實現類基本上都維護了一個三元組<value,row,col>的列表結構。不同的實現類中value的類型不相同。<row,col>唯一確定一個三元組。CategoryDataset的實現類提供對這個三元組的增刪改查操作。
PieDataset接口有兩個主要的實現類:CategoryToPieDataset、DefaultPieDataset。
SeriesDataset接口的實現類基本上都維護了一種特定數據結構的列表。以TimeSeriesCollection為例。它維護一個TimeSeries對象列表,提供對該列表的增刪查操作。每個TimeSeries對象維護一個<time,value>列表,提供對該列表的增刪改查操作。
posted on 2010-07-20 20:29
donghang73 閱讀(1515)
評論(0) 編輯 收藏 所屬分類:
學習筆記