JFreeChart最佳實踐:刻度蜘蛛環(huán)圖
JFreeChart主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。當(dāng)前JFreeChart最新版本是1.0.13,下面demo和刻度蜘蛛環(huán)圖都基于此版本。
對于刻度蜘蛛環(huán)圖,效果如下圖,網(wǎng)上有一些例子,但是只有刻度,同時不能指定刻度最大值。最后沒辦法,只好自己改一個。
改的時候,決定新建一個chart類,通過繼承JFreechart自帶例子中的SpiderWebPlot類來實現(xiàn),SpiderWebPlot類的demo效果見下圖。
這個demo沒有刻度,沒有圓環(huán)。
整理一下所有要做的事情:
1.加入刻度,可自定義刻度數(shù)以及刻度的最大值,同時刻度值前后可以是加入單位符號,如百分號、美元符號、人民幣符號等;
2.加入圓環(huán),圓環(huán)的半徑與刻度一一對應(yīng),有幾個刻度,就有幾個圓環(huán)
畫刻度的代碼直接參考了網(wǎng)上的例子,自己增加了刻度數(shù)、刻度最大值、單位符號的功能;然后畫圓環(huán)的代碼參考自一個demo,見下圖,然后修改了相應(yīng)的算法,確保與刻度對應(yīng),搞定。
在修改的過程中,還碰到了中文亂碼問題。對與JFreechart中文亂碼問題,網(wǎng)上搜素答案也是一大把,但都不能解決。最后還是跟蹤了一下源代碼,發(fā)現(xiàn)在創(chuàng)建JFreeChart對象的時候,默認應(yīng)用了JFreechart提供的標(biāo)準(zhǔn)主題,其標(biāo)準(zhǔn)主題提供的文字是Tahoma,這個字體不支持中文,最后一次性的將其改為“宋體”解決了(如果不想修改JFreechart的代碼,可能就需要在每個地方去單獨設(shè)置這些參數(shù)了)。在JFreechart中,調(diào)用這個標(biāo)準(zhǔn)主題的代碼都是在創(chuàng)建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改成系統(tǒng)支持的中文字體即可,如宋體
- 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;
- ......
- }
總結(jié)一下,由于自己對JAVA畫圖繪圖的API一竅不通,所以才用了這樣的思路去改;在改的過程中,發(fā)現(xiàn)都是通過修改繪圖的方法實現(xiàn)這些功能的,如果自己熟悉JAVA畫圖繪圖的API,其實,拿到第一個demo的時候基本上就可以直接改了。
進入原文下載刻度蜘蛛環(huán)圖和demo的源碼。
原文鏈接:http://easycode.iteye.com/blog/1172486
【編輯推薦】