[原創]JFreechart創建刻度蜘蛛環圖

JFreeChart主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分佈圖、混合圖、甘特圖以及一些儀表盤等等。當前JFreeChart最新版本是1.0.13,下面demo和刻度蜘蛛環圖都基於此版本。
對於刻度蜘蛛環圖,效果如下圖,網上有一些例子,但是隻有刻度,同時不能指定刻度最大值。最後沒辦法,只好自己改一個。
[img]http://dl.iteye.com/upload/attachment/554522/1e3f728c-657f-3c80-bd55-a85e3c728578.png[/img]
改的時候,決定新建一個chart類,通過繼承JFreechart自帶例子中的SpiderWebPlot類來實現,SpiderWebPlot類的demo效果見下圖。
[img]http://dl.iteye.com/upload/attachment/554524/2ccef5f0-45a8-3564-8536-28573d1ddf3c.png[/img]
這個demo沒有刻度,沒有圓環。
整理一下所有要做的事情:
1.加入刻度,可自定義刻度數以及刻度的最大值,同時刻度值前後可以是加入單位符號,如百分號、美元符號、人民幣符號等;
2.加入圓環,圓環的半徑與刻度一一對應,有幾個刻度,就有幾個圓環
畫刻度的代碼直接參考了網上的例子,自己增加了刻度數、刻度最大值、單位符號的功能;然後畫圓環的代碼參考自一個demo,見下圖,然後修改了相應的算法,確保與刻度對應,搞定。
[img]http://dl.iteye.com/upload/attachment/554528/19e571ea-ea12-3725-8149-5da88a850b9e.png[/img]
在修改的過程中,還碰到了中文亂碼問題。對與JFreechart中文亂碼問題,網上搜素答案也是一大把,但都不能解決。最後還是跟蹤了一下源代碼,發現在創建JFreeChart對象的時候,默認應用了JFreechart提供的標準主題,其標準主題提供的文字是Tahoma,這個字體不支持中文,最後一次性的將其改爲“宋體”解決了(如果不想修改JFreechart的代碼,可能就需要在每個地方去單獨設置這些參數了)。在JFreechart中,調用這個標準主題的代碼都是在創建jfreechart對象的代碼中,如demo代碼中的createChart方法的ChartUtilities.applyCurrentTheme(jfreechart);語句,以及工廠類ChartFactory的createPolarChart方法中currentTheme.apply(chart);語句。
    /**
* Creates a new default instance.
*
* @param name the name of the theme (<code>null</code> not permitted).
*/
public StandardChartTheme(String name) {
if (name == null) {
throw new IllegalArgumentException("Null 'name' argument.");
}
this.name = name;
/將四個Tahoma改成系統支持的中文字體即可,如宋體
this.extraLargeFont = new Font("Tahoma", Font.BOLD, 20);/
this.largeFont = new Font("Tahoma", Font.BOLD, 14);
this.regularFont = new Font("Tahoma", Font.PLAIN, 12);
this.smallFont = new Font("Tahoma", Font.PLAIN, 10);
this.titlePaint = Color.black;
......
}


總結一下,由於自己對JAVA畫圖繪圖的API一竅不通,所以才用了這樣的思路去改;在改的過程中,發現都是通過修改繪圖的方法實現這些功能的,如果自己熟悉JAVA畫圖繪圖的API,其實,拿到第一個demo的時候基本上就可以直接改了。
附件是刻度蜘蛛環圖和demo的源碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章