JFreeChart1.02的使用_第1頁
JFreeChart1.02的使用_第2頁
JFreeChart1.02的使用_第3頁
JFreeChart1.02的使用_第4頁
JFreeChart1.02的使用_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JFREECHART學(xué)習(xí)總結(jié)目錄一、JFreeChart簡介3二、JFreeChart的獲取3三、JFreeChart環(huán)境配置3四、JFreeChart功能介紹4五、JFreeChart核心類庫介紹4六、JFreeChart支持的圖表介紹4七、JFreeChart開發(fā)5第一步:建立DataSet數(shù)據(jù)源5第二步:創(chuàng)造JFreeChart5第三步:設(shè)置圖形顯示的屬性6第四步:寫入圖片或輸出界面6八、JFREECHART圖片在web中的應(yīng)用88.1在eclipse中創(chuàng)建tomcat工程88.2 創(chuàng)建web.xml88.3 配置web.xml98.4 創(chuàng)建含有JFreeChart圖片的頁面98.5 配

2、置server.xml128.6測(cè)試頁面12九、JFreeChart使用的優(yōu)缺點(diǎn)131.優(yōu)點(diǎn):132.缺點(diǎn):13九、使用JfreeChart開發(fā)圖表經(jīng)驗(yàn)總結(jié)-14十、JFreeChart中文API15一、JFreeChart簡介JFreeChart是開放源代碼站點(diǎn)SourceF上的一個(gè)JAVA項(xiàng)目,它主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。這些不同式樣的圖表基本上可以滿足目前的要求。當(dāng)在項(xiàng)目中客戶需要圖標(biāo)分析時(shí),JFreeChart便是最好的選擇,JFreeChart是開源項(xiàng)目,可以

3、方便的從其官方網(wǎng)站上獲得其源代碼,可以方便的與Swing相結(jié)合使用,還可以導(dǎo)入到Web頁面中,更是可以方便的利用其工廠方法將圖表寫入jpeg或者png格式的圖片中,本文檔將簡要介紹小JFreeChart的使用。 二、JFreeChart的獲取JFreeChart 是JFreeChart公司在開源網(wǎng)站SourceF上的一個(gè)項(xiàng)目,該公司的主要產(chǎn)品有如下: 1.JFreeReport :報(bào)表解決工具 2.JFreeChart:Java 圖形解決方案(Application/Applet/Servlet/Jsp) 3.JCommon :JFreeReport和JFreeChart的公共

4、類庫 4.JFreeDesigner :JFreeReport的報(bào)表設(shè)計(jì)工具 我們可以從jfree官方網(wǎng)站上獲取最新版本和相關(guān)資料(但是jfree的document需要40美金才能獲?。?, 獲取地址:/jfreechart/index.html(同時(shí)可以獲得簡明介紹) 我們使用的版本:jfreechart-1.0.12.zip為例子進(jìn)行說明。三、JFreeChart環(huán)境配置 1、解壓jfreechart-1.0.12.zip到指定位置,其中source是jfreechart的源碼,jfreechart-1.0.12-demo.jar 是例子程序。 2、為了

5、配置成功,我們需要關(guān)注的文件有如下三個(gè):jfreechart-1.0.12.jar、libjcommon-1.0.15.jar、libgnujaxp.jar。JCommon-1.0.15.jar是一組有用的classes集合. 這個(gè)類庫包含了以下功能: * 文本工具類(text utilities),* 用來顯示關(guān)于應(yīng)用程序信息的用戶界面類,* 布局定制管理器,* 一個(gè)日期選擇面板,* 序列化工具類,* XML解析器支持類。 3、如果是Application開發(fā),把上述三個(gè)文件拷貝到%JAVA_HOME%LIB中,同時(shí)在環(huán)境變量CLASSPATH中加入。在開發(fā)中,還有在工程中導(dǎo)入jfreech

6、art-1.0.12.jar,jcommon-1.0.15.jar,否則會(huì)在文件第一行提示有錯(cuò)誤。 如果是WEB開發(fā),以TOMCAT中的一個(gè)WEB項(xiàng)目TEST為例子說明: 把上述三個(gè)文件拷貝到TESTWEB-INFLIB中,然后修改TESTWEB-INFweb.xml文件,在其中加入如下代碼: DisplayChart org.jfree.chart.servlet.DisplayChart DisplayChart /servlet/DisplayChart 至此jfreechart的配置就完成了,下面就可以進(jìn)行jfreechart的開發(fā)了。這里值得提出的是jfreechart的類結(jié)構(gòu)設(shè)計(jì)前

7、后兼容性不是很好,不同版本的jfreechart中類庫結(jié)構(gòu)可能不一樣,有時(shí)候可能需要查源碼。四、JFreeChart功能介紹JFreeChart是一個(gè)免費(fèi)的Java圖表庫,讓開發(fā)人員開發(fā)出專業(yè)的圖表顯示在他們的應(yīng)用程序。 JFreeCharts extensive feature set includJFreeChart的廣泛的功能包括: a consistent and well-documented API, supporting a wide range of chart types;翔實(shí)的API ,支持各種各樣的圖表類型; a flexible design that is easy

8、to extend, and targets both server-side and client-side applications;一種靈活的設(shè)計(jì),易于擴(kuò)展,和指標(biāo)均服務(wù)器端和客戶端的應(yīng)用; 支持多種類型的輸出,包括Swing界面,圖像文件(包括PNG和JPEG格式) ,和矢量圖形文件格式; JFreeChart是“開源” ,或更具體的免費(fèi)軟件 。 使用JFREECHART能夠是新下列圖表:餅圖(二維和三維) , 柱狀圖 (水平,垂直),線圖,點(diǎn)圖,時(shí)間變化圖,甘特圖, 股票行情圖,混和圖, 溫度計(jì)圖, 刻度圖等常用商用圖表。五、JFreeChart核心類庫介紹jfreechart源碼主

9、要由兩個(gè)大的包組成:org.jfree.chart和org.jfree.data。其中前者主要與圖形本身有關(guān),后者與圖形顯示的數(shù)據(jù)有關(guān)。核心類主要有: org.jfree.chart.JFreeChart:圖表對(duì)象,任何類型的圖表的最終表現(xiàn)形式都是在該對(duì)象進(jìn)行一些屬性的定制。JFreeChart引擎本身提供了一個(gè)工廠類用于創(chuàng)建不同類型的圖表對(duì)象。 org.jfree.data.category.XXXDataSet:數(shù)據(jù)集對(duì)象,用于提供顯示圖表所用的數(shù)據(jù)。根據(jù)不同類型的圖表對(duì)應(yīng)著很多類型的數(shù)據(jù)集對(duì)象類。 org.jfree.chart.plot.XXXPlot:圖表區(qū)域?qū)ο?,基本上這個(gè)對(duì)象決定

10、著什么樣式的圖表,創(chuàng)建該對(duì)象的時(shí)候需要Axis、Renderer以及數(shù)據(jù)集對(duì)象的支持。 org.jfree.chart.axis.XXXAxis:用于處理圖表的兩個(gè)軸:縱軸和橫軸。 org.jfree.chart.render.XXXRender:負(fù)責(zé)如何顯示一個(gè)圖表對(duì)象。 org.jfree.chart.urls.XXXURLGenerator:用于生成Web圖表中每個(gè)項(xiàng)目的鼠標(biāo)點(diǎn)擊鏈接。 XXXXXToolTipGenerator:用于生成圖象的幫助提示,不同類型圖表對(duì)應(yīng)不同類型的工具提示類。六、JFreeChart支持的圖表介紹JFreeChart支持的圖表類型總結(jié) 圖表類型 工廠類方法

11、 數(shù)據(jù)集類型 備注 柱狀圖 createBarChart CategoryDataset 柱狀圖3D createBarChart3D CategoryDataset 餅圖 createPieChart PieDataset 餅圖3D createPieChart3D PieDataset 線圖 createLineChart CategoryDataset 線圖3D createLineChart3D CategoryDataset 復(fù)合餅圖 createMultiplePieChart CategoryDataset 需要設(shè)置TableOrder 復(fù)合餅圖3D createMultiple

12、PieChart3D CategoryDataset 環(huán)形圖 createRingChart PieDataset 瀑布圖 createWaterfallChart CategoryDataset 柱圖特殊形式 面積圖 createAreaChart CategoryDataset 散點(diǎn)圖 createScatterPlot XYSeriesCollection 組織圖 createHistogram XYSeriesCollection 數(shù)據(jù)點(diǎn)階梯圖 createXYStepChart XYSeriesCollection 堆積面積圖 createStackedAreaChart Categ

13、oryDataset 堆積柱狀圖 createStackedBarChart CategoryDataset 堆積柱狀圖3D createStackedBarChart3D CategoryDataset 數(shù)據(jù)點(diǎn)線圖 createXYLineChart XYSeriesCollection 數(shù)據(jù)點(diǎn)面積圖 createXYAreaChart XYSeriesCollection 數(shù)據(jù)點(diǎn)階梯面積圖 createXYStepAreaChart XYSeriesCollection 堆積數(shù)據(jù)點(diǎn)面積圖 createStackedXYAreaChart TableXYDataset 時(shí)序圖 createT

14、imeSeriesChart XYDataset 晶片圖 createWaferMapChart WaferMapDataset WindPlot createWindPlot WindDataset 極線圖 createPolarChart XYDataset 氣泡圖 createBubbleChart XYZDataset BoxAndWhiskerChart createBoxAndWhiskerChart BoxAndWhiskerXYDataset 燭臺(tái)圖 createCandlestickChart OHLCDataset 股價(jià)圖 createHighLowChart OHLCDa

15、taset 2種 時(shí)間線差別 甘特圖 createGanttChart IntervalCategoryDataset 數(shù)據(jù)點(diǎn)柱狀圖 createXYBarChart IntervalXYDataset 七、JFreeChart開發(fā)要建立一個(gè)JFreeChart圖形主要有以下三個(gè)步驟(以柱圖為例):第一步:建立DataSet數(shù)據(jù)源BarChart使用的dataset接口是org.jfree.data.defaultcategorydataset的dataset。使用categorydataset的子類org.jfree.data.defaultcategorydataset,再用addValu

16、e()方法把資料加入到dataset中,建立包含數(shù)值的二維陣列,代碼如下:DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, 100, 蘋果);dataset.addValue(200, 200, 梨子);dataset.addValue(300, 300, 葡萄);dataset.addValue(400, 400, 香蕉);dataset.addValue(500, 500, 荔枝);dataset.addValue(600, 600, 西瓜);或者使用org.jfree.d

17、ata.datasetutilities ,CategoryDatasetdataset=DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);其中:rowKeys表示X軸數(shù)據(jù),columnKeys表示Y軸數(shù)據(jù),data表示填充柱狀圖所要的實(shí)際數(shù)據(jù)(來自于數(shù)據(jù)庫)。第二步:創(chuàng)造JFreeChart 要用dataset創(chuàng)造一個(gè)JFreeChart類別,我們并不直接實(shí)例化出一個(gè)JFreeChart實(shí)例,而是使用ChartFactory工廠類來創(chuàng)造一個(gè)JFreeChart實(shí)例。代碼如下:JFreeChart chart = C

18、hartFactory.createBarChart3D(水果產(chǎn)量圖, /JFreeChart標(biāo)題 水果, /目錄軸顯示標(biāo)簽產(chǎn)量, /數(shù)值軸顯示標(biāo)簽 dataset, /數(shù)據(jù)源PlotOrientation.VERTICAL, /圖表方向:水平、垂直 true, /是否是否顯示圖例(對(duì)于簡單的柱狀圖是false) false, /是否生成熱點(diǎn)工具 false); /是否生成URL連接第三步:設(shè)置圖形顯示的屬性a)ValueAxis類,設(shè)置柱到圖上下邊的距離。實(shí)現(xiàn)方法是:ValueAxisrangeAxis=plot.getRangeAxis();設(shè)置最高的一個(gè)柱與圖片頂端的距離:rangeAx

19、is.setUpperMargin(0.15)設(shè)置最低的一個(gè)柱與圖片底端的距離:rangeAxis.setLowerMargin(0.15)b)org.jfree.chart.renderer.BarRenderer3D類,設(shè)置圖形上顯示的數(shù)值。實(shí)現(xiàn)方法如下:BarRenderer3Drenderer=newBarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);設(shè)置Wall的顏色:renderer.setWallPaint(Color.gray);設(shè)置每個(gè)柱的顏色:renderer.setSeriesPaint(0,newColor

20、(0,0,255);renderer.setSeriesPaint(1,newColor(0,100,255);renderer.setSeriesPaint(2,Color.GREEN);設(shè)置每個(gè)柱的Outline顏色renderer.setSeriesOutlinePaint(0,Color.BLACK);renderer.setSeriesOutlinePaint(1,Color.BLACK);renderer.setSeriesOutlinePaint(2,Color.BLACK);設(shè)置每個(gè)地區(qū)所包含的平行柱之間的距離renderer.setItemMargin(0.1);顯示每個(gè)柱的

21、數(shù)值,并修改該數(shù)值的字體屬性renderer.setItemLabelFont(newFont(黑體,Font.PLAIN,12);renderer.setItemLabelsVisible(true);為圖形加入超連接renderer.setItemURLGenerator(newStandardCategoryURLGenerator();renderer.setToolTipGenerator(newStandardCategoryToolTipGenerator();第四步:寫入圖片或輸出界面a. 寫入圖片利用ChartUtilities.writeChartAsJPEG(fos_jp

22、g, /圖片輸出地址1.0f, /設(shè)置圖片質(zhì)量 chart, /指定chart500, /設(shè)置圖片寬度400); /設(shè)置圖片高度在打開圖片時(shí),有可能出現(xiàn)異常,注意撲捉異常。代碼如下:FileOutputStream fos_jpg = null;try fos_jpg = new FileOutputStream(D:fruit.jpg);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f, chart, 500, 400);finallytryfos_jpg.close();catch (Exception e) b. 顯示圖片使用ChartFrame類

23、,ChartFrame ChartFrame = new ChartFrame(“水果產(chǎn)量圖”,chart);chartFrame.pack();chartFrame.setFont(new Font(宋體,Font.BOLD,20);chartFrame.setVisible(true);柱狀圖實(shí)例結(jié)果輸出:其他的圖創(chuàng)建方法都類似,但是每種圖形都將對(duì)應(yīng)每個(gè)dataset,所以在使用的時(shí)候注意選擇創(chuàng)建dataset數(shù)據(jù)源。八、JFREECHART圖片在web中的應(yīng)用通過上邊的介紹,我們已經(jīng)知道JFreechart是很好的Java圖表生成工具,利用JFreeChart可以很方便的生產(chǎn)餅圖、折線圖

24、、柱圖等圖表??梢愿有蜗蟮姆治鰯?shù)據(jù)。本部分主要介紹JFreeChart生成的圖片在Web工程中的應(yīng)用。8.1在Myeclipse中創(chuàng)建Web工程1、在Myeclipse中創(chuàng)建web工程。 8.2 創(chuàng)建web.xml在Web工程目錄下WEB-INF目錄下,創(chuàng)建web.xml。具體步驟為:1. 在右擊Tomcat工程目錄下WEB-INF目錄,選擇“new”-“File”。2. 輸入file名稱為web.xml,點(diǎn)擊“finish”完成創(chuàng)建。3. 在打開的file中輸入以下內(nèi)容: 至此完成web.xml的創(chuàng)建。8.3 添加相關(guān)JAR文件1.右擊項(xiàng)目名選擇“Build Path”,在其下拉框中選擇最

25、后一個(gè)“Config Bulid Path”。2.選擇“Libraries”。3.然后在選擇“Add External JARs”.4.在彈出的對(duì)話框中選擇在/common/lib/jasper-runtime.jar,jsp-api.jar,servlet-api.jar等JAR包文件。在加入JFreeChart需要的jfreechart-1.0.12.jar,jcommon-1.0.15.jar即可。5.再將jfreechart-1.0.12.jar,jcommon-1.0.15.jar拷到工程目錄下WEB-INF/lib文件夾中即可。8.3 配置web.xml 在web.xml文件和中間

26、加入以下的配置。 DisplayChart org.jfree.chart.servlet.DisplayChart DisplayChart /servlet/DisplayChart 8.4 創(chuàng)建含有JFreeChart圖片的頁面1.右擊Tomcat工程目錄下WEB-INF目錄,選擇“new”-“File”。2.輸入file名稱為xyline.jsp,點(diǎn)擊“finish”完成創(chuàng)建。3.打開File文件,在文件中輸入以下代碼:java.awt.Font,org.jfree.data.category.CategoryDataset,org.jfree.chart.ChartUtilities

27、,org.jfree.chart.renderer.category.LineAndShapeRenderer,org.jfree.chart.labels.StandardCategoryItemLabelGenerator,org.jfree.chart.plot.CategoryPlot,org.jfree.data.category.DefaultCategoryDataset,org.jfree.chart.ChartFactory,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.JFreeChart,org.jfree.ch

28、art.servlet.ServletUtilities,org.jfree.chart.entity.StandardEntityCollection,org.jfree.chart.ChartRenderingInfo,org.jfree.chart.imagemap.StandardURLTagFragmentGenerator,org.jfree.chart.labels.StandardCategoryItemLabelGenerator,org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,程序員學(xué)歷情況調(diào)查表img src= wid

29、th=800 height=500border=0 usemap=#map08.5 配置server.xml在tomcat工程中配置server.xml信息,可以有兩種方式:1. 右擊工程名稱,選擇“Tomcat Project”,在其下拉框中選擇“Updata context definition”,點(diǎn)擊提示“Oparetion Successful”,則說明在server.xml中已配置好元素。2. 在/conf/server.xml中手動(dòng)配置元素。具體方法是:用記事本方式打開server.xml,在元素里添加元素,添加如下代碼: 元素的屬性描述參見下表:描述屬性path指定訪問該Web應(yīng)

30、用的URL入口docBase指定Web應(yīng)用的文件路徑。可以給定絕對(duì)路徑,也可以給定相對(duì)于Host的appBase屬性的相對(duì)路徑。如果Web應(yīng)用采用開放目錄結(jié)構(gòu),那就指定Web應(yīng)用的根目錄;如果Web應(yīng)用是個(gè)WAR文件,那就指定WAR文件的路徑reloadable如果這個(gè)屬性設(shè)置為true,Tomcat服務(wù)器在運(yùn)行狀態(tài)下會(huì)監(jiān)視在WEB-INF/class和WEB-INF/lib目錄下CLASS文件的改動(dòng)。如果監(jiān)測(cè)到有class被更新,服務(wù)器會(huì)自動(dòng)加載Web應(yīng)用。workDir指定work的文件路徑。8.6測(cè)試頁面啟動(dòng)tomcat,打開IE,在地址欄中輸入http:/localhost:8080/

31、Test/xyline.jsp回車即可顯示一下網(wǎng)頁,把鼠標(biāo)放在這點(diǎn)上,將會(huì)出現(xiàn)如圖那樣提示節(jié)點(diǎn)數(shù)據(jù)。八、JFreeChart使用的優(yōu)缺點(diǎn)1.優(yōu)點(diǎn):圖表能使數(shù)據(jù)形象直觀的表現(xiàn),給數(shù)據(jù)統(tǒng)計(jì)也提供了方便,JFreeChart目前是最好的java圖形解決方案,基本能夠解決目前的圖形方面的需求,主要包括如下幾個(gè)方面:餅圖(二維和三維) , 柱狀圖 (水平,垂直),線圖,點(diǎn)圖,時(shí)間變化圖,甘特圖, 股票行情圖,混和圖, 溫度計(jì)圖, 刻度圖等常用商用圖表),圖形可以導(dǎo)出成PNG和JPEG格式,同時(shí)還可以與PDF和EXCEL關(guān)聯(lián)。JFreeChart還是開源項(xiàng)目,可以在其官方網(wǎng)站上得到其源代碼。2.缺點(diǎn):JF

32、reeChart項(xiàng)目本身的類結(jié)構(gòu)設(shè)計(jì)的并不是很好,首先在創(chuàng)建圖表的時(shí)候用到了大量的工廠方法,這樣做雖然可以簡化創(chuàng)建圖表代碼,但是對(duì)項(xiàng)目本身或者開發(fā)人員來講自行擴(kuò)展一種新的圖標(biāo)仍然是一件很麻煩的事情;其次除圖標(biāo)本身外其余的類過于復(fù)雜,使用者必須去了解每個(gè)類型的圖表對(duì)象應(yīng)該對(duì)應(yīng)哪些Axis、Plot、Renderer類,并且必須非常熟悉這些類的構(gòu)造方法中的每個(gè)參數(shù)的具體含義。不過雖然還存在很多問題,但是JFreeChart本身仍不失為一個(gè)優(yōu)秀的圖表引擎。JFreeChart還有個(gè)缺點(diǎn)是漢字顯示的問題,我在網(wǎng)上找來些這方面的資料,說是在其解壓文件下找其字體的配置文件,不過我在最新的版本中沒有找到。我

33、的解決方案是,例如在柱狀圖中,我們可以獲取縱軸或橫軸的顯示標(biāo)簽,在標(biāo)簽上設(shè)置顯示字體,可以達(dá)到顯示漢字的效果。代碼如下:(CategoryPlot)chart.getPlot().getDomainAxis().setLabelFont(new Font(宋體,Font.BOLD,10); /獲得x軸標(biāo)簽,并設(shè)置字體(CategoryPlot)chart.getPlot().getRangeAxis().setLabelFont(new Font(宋體,Font.BOLD,10); /獲得y軸標(biāo)簽,并設(shè)置字體使用JfreeChart開發(fā)圖表經(jīng)驗(yàn)總結(jié)生成基于瀏覽器的圖表方式比較多。據(jù)我所知道的,

34、常用的有三種:1、 VML方式實(shí)現(xiàn)。這種方式是通過產(chǎn)生客戶端的代碼,由客戶端根據(jù)代碼生成相應(yīng)的圖表。但這種方式產(chǎn)生的圖表有很多的局限性,如受限于瀏覽器,有些瀏覽器可能并不支持VML。另外,沒有封裝完整的圖表開發(fā)包。2、 通過applet來產(chǎn)生圖表。這種方式也對(duì)客戶端要求比較高,必須要有JRE,而且通過applet生成的圖表在加載過程中會(huì)有個(gè)Java的Log動(dòng)畫。用戶看了可能會(huì)感覺不太舒服。3、 通過服務(wù)端直接生成圖表的圖片。這種方式對(duì)客戶端幾乎沒有什么要求,缺點(diǎn)是加重了服務(wù)端的負(fù)擔(dān),對(duì)服務(wù)端要求就相對(duì)高了點(diǎn)。經(jīng)過比較,根據(jù)項(xiàng)目自身特點(diǎn),我們打算采用第三種方式來開發(fā)圖表。為了縮短開發(fā)周期、節(jié)約成

35、本,我們選用了開源的JFreeChart(/jfreechart/index.php)。jfreechart是一個(gè)免費(fèi)創(chuàng)建圖表的java工具,目前最新版本是JFreeChart-1.0.0-rc1。它可以生成各式各樣的圖表。這些圖表包括餅圖、柱狀圖、線形圖、區(qū)域圖、甘特圖等等,基本可以滿足各種項(xiàng)目的要求。但在開發(fā)過程中我也發(fā)現(xiàn)了JFreeChart的一些不足,或者說有些稱得上是BUG??傮w說來,JFreeChart還是個(gè)優(yōu)秀的開源項(xiàng)目。關(guān)于JFreeChart生成圖表的文章比較多了,我主要談?wù)勈褂肑FreeChart的一些比較棘手問題以及解決方法。同時(shí)也會(huì)

36、將問題所用到的源碼(JFreeChart-1.0.0-rc1+Struts1.2.4)從項(xiàng)目中抽象出來一起提供給大家。一、 圖片上熱點(diǎn)鏈接中文亂碼的解決方法這個(gè)問題是在我查閱關(guān)于JFreeChart相關(guān)資料時(shí)出現(xiàn)頻率最高的一個(gè)問題。其實(shí)這個(gè)亂碼問題不能怪罪于JFreeChart。有人甚至就因此認(rèn)為JFreeChart對(duì)中文支持不太完善,JFreeChart可要叫了:我是冤枉的!我們來找出問題產(chǎn)生的原因,這個(gè)問題也就不難解決了。首先查看一下出現(xiàn)問題頁面的Html源文件,你會(huì)發(fā)現(xiàn)在源文件的開頭多出了一段map代碼,代碼類似于這樣:這部分map代碼其實(shí)是JFreeChart產(chǎn)生的,是用來產(chǎn)生圖片上的

37、熱點(diǎn)鏈接,這也是問題產(chǎn)生的根源所在。你的Jsp頁面通過或者來設(shè)置contentType這無可厚非,但map并不是由這個(gè)jsp頁面產(chǎn)生的。它是JFreeChart通過PrintWriter產(chǎn)生的。查看一下你生成圖片的Chart源碼,其中有ChartUtilities.writeImageMap(pw, filename, info, false)這樣的語句。這是用來向頁面寫入map代碼的。默認(rèn)情況下,map代碼會(huì)以服務(wù)器默認(rèn)編碼(ISO-8859-1)輸出。這就和你的Jsp編碼不一致,從而產(chǎn)生亂碼。原因找到了,問題也就不難解決的。設(shè)置PrintWriter的contentType與Jsp的con

38、tentType保存一致就可以了。代碼如下(筆者的Web應(yīng)用是基于Struts框架的):/PieMothAciton.javapublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception /設(shè)置輸出編碼格式response.setContentType(text/html;charset=UTF-8); PrintWriter out = response.getWriter

39、();String filename = chart.generatePieChart3D(月統(tǒng)計(jì)比例圖, session, out);String graphURL = request.getContextPath() + /servlet/DisplayChart?filename= + filename;request.setAttribute(filename,filename);request.setAttribute(graphURL,graphURL);return mapping.findForward(SUCCESS);重新部署你的Web應(yīng)用,中文亂碼文件就可以解決了。二、

40、餅圖顯示百分比在餅圖中JFreeChart默認(rèn)只顯示選項(xiàng)和數(shù)值,沒有顯示各項(xiàng)所占比例。由于手頭沒有1.0版的JFreeChart Developer Guide(這可是要錢的,后來想想即使有,也未必能找到關(guān)于百分比這方面的說明),再加上DEMO中的餅圖都沒有顯示百分比,無法參考。后來在網(wǎng)上找到了一個(gè)老版本的例子,其中能顯示百分比。它是通過在PiePlot中設(shè)置的:PiePlot pie;pie.setPercentFormatString(#,#0.0#%);但1.0版本中根本就找不到setPercentFormatString這方法,JFreeChart各版本之間改動(dòng)比較大,很難兼容。還好它

41、是開源的,把它的源碼都搜索了一遍,認(rèn)真讀了一些源碼,終于理出了頭緒。原來在1.0.0-rc1版中顯示百分比已經(jīng)調(diào)整到StandardPieItemLabelGenerator構(gòu)造函數(shù)中了,StandardPieItemLabelGenerator有三個(gè)構(gòu)造函數(shù)。StandardPieItemLabelGenerator()不顯示各項(xiàng)所占比例。另外兩個(gè)可以顯示比例。代碼如下:plot.setLabelGenerator(new StandardPieItemLabelGenerator(StandardPieItemLabelGenerator.DEFAULT_TOOLTIP_FORMAT);/

42、或者采用下面自定義樣式顯示,0表示選項(xiàng),1表示數(shù)值,2表示所占比例plot.setLegendLabelGenerator(new StandardPieItemLabelGenerator(0: (1M, 2);效果如下圖:默認(rèn)顯示百分比是取整的,如果要讓百分比保留二位小數(shù),可以用第三個(gè)構(gòu)造函數(shù):plot.setLabelGenerator(new StandardPieItemLabelGenerator(“0=1(2)”,NumberFormat.getNumberInstance(),new DecimalFormat(0.00%);效果如下圖:三、 混合圖表(不同類型的圖混合顯示)我

43、們經(jīng)常用的是柱狀圖、曲線圖、和餅圖,這三類型圖基本能滿足大部分項(xiàng)目的需求。但有些項(xiàng)目比較特殊,可能需要在一張圖上同時(shí)顯示不同類型的圖。這在JFreeChart中可以輕松實(shí)現(xiàn)。例如我們要做個(gè)流量監(jiān)控的系統(tǒng),該系統(tǒng)一天中在不同的時(shí)間段有不同的閥值(最大值),該閥值表示成階梯線。而實(shí)際流量就是個(gè)曲線了。當(dāng)流量在某個(gè)時(shí)段內(nèi)超過閥值時(shí)就觸發(fā)相應(yīng)的事件(如限流)。要表示閥值和流量的對(duì)比關(guān)系就需要兩種類型的圖片在同一張圖表上表示,如下圖:首先像創(chuàng)建普通圖表一樣來創(chuàng)建圖片,筆者先創(chuàng)建了一個(gè)XYStep Chart。然后創(chuàng)建第二圖表的Renderer,再分別將第二圖表的Dataset、Renderer添加進(jìn)第一圖表的plot。實(shí)例代碼如下:/MultipleChart.javaJFreeChart jfreechart = ChartFactory.createXYStepArea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論