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