JFreeChart(結合struts2) 學習總結(包含JFreeChartdemo 的源碼和文檔)

    最近項目中用到一些圖標顯示,用的是JFreeChart 來做的。做完以後順便也總結下,方便以後使用中忘記。

   

    一般的快速學習的話,看下Demo 能最快上手,所以我也採取這種形式。

項目首頁:http://www.jfree.org/jfreechart/

由於jfreechart 的文檔時收費的,不過google 的強大已經解決了。。哈哈。。有它的demo 的源碼和文檔

 

 

    下面是一個時間曲線圖生成的Demo

 

package test.chart;

import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;

public class JFreeChartDemo {

	public static void main(String[] args) throws IOException {
		JFreeChart chart = ChartFactory.createTimeSeriesChart("圖表標題", // 圖表標題
				"目錄軸的顯示標籤",// 目錄軸的顯示標籤
				"數值軸的顯示標籤",// 數值軸的顯示標籤
				getDataSet(),// 數據集
				true, // 是否顯示圖例
				false, // 是否顯示工具提示
				false);// 是否生成URL
		// 重新設置圖表標題,改變字體
		chart.setTitle(new TextTitle("重新設置圖表標題",
				new Font("黑體", Font.ITALIC, 22)));
		// 取得統計圖表的第一個圖例
		LegendTitle legend = chart.getLegend(0);
		// 修改圖例的字體
		legend.setItemFont(new Font("宋體", Font.BOLD, 14));
		// 取得時間順序圖的plot 對象
		XYPlot plot = (XYPlot) chart.getPlot();
		// 取得橫軸
		ValueAxis categoryAxis = plot.getDomainAxis();
		// 設置橫軸顯示標籤的字體
		categoryAxis.setLabelFont(new Font("宋體", Font.BOLD, 22));
		categoryAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 18));
		// 取得縱軸
		NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
		// 設置縱軸的字體
		numberAxis.setLabelFont(new Font("宋體", Font.BOLD, 22));

		FileOutputStream fos = new FileOutputStream("c:/zhxing.jpg");
		// 將圖表輸出成jpg 文件
		ChartUtilities.writeChartAsJPEG(fos,// 輸出到哪個輸出流
				1, // jpeg 圖片的質量,0~1之間
				chart, // 統計圖表對象
				800,// 長
				600// 寬
				);
		fos.close();
		System.out.println("end!");
	}

	private static XYDataset getDataSet() {
		// 時間曲線圖1
		TimeSeries s1 = new TimeSeries("時間順序圖1");
		// 該Month 爲JFreeChart 自己實現的Month 類,還有其他Day、Year 等,可查看源碼得知
		s1.add(new Month(1, 2009), 400);
		s1.add(new Month(2, 2009), 500);
		s1.add(new Month(3, 2009), 200);
		// 時間曲線圖2
		TimeSeries s2 = new TimeSeries("時間順序圖2");
		s2.add(new Month(1, 2009), 3700);
		s2.add(new Month(2, 2009), 3800);
		s2.add(new Month(3, 2009), 2900);
		// 用TimeSeriesCollection 來保存多條時間曲線
		TimeSeriesCollection dataset = new TimeSeriesCollection();
		dataset.addSeries(s1);
		dataset.addSeries(s2);
		return dataset;
	}
}

 

 

上面的Dome 是參照了struts2 權威指南上的,還有一些圖例顯示,將在以後再添加進來。。。

 

   看了幾個圖例的生成,可以總結下大概的步驟:

   1、用CharFactory 工廠生成相應的圖例,其構造方法基本有些類似。

   2、可以重新設置標題(可以發現凡是有文字顯示的通常可以設置字體的風格和大小)

   3、獲取相應的圖例對象

   4、設置圖例對象的一些屬性,如字體等。

   5、用ChartUtilities可以將圖例生成在文件中。

   而生成數據階段則對象生成相應的對象,然後添加數據就可以了。。

 

在struts2 的項目上,可以參看下面的Demo

 

public class Struts2Demo extends ActionSupport{	
	private JFreeChart chart;

	//獲取的action方法
	public String LoadChart() throws IOException{	
		chart=this.gainChart();
		return SUCCESS;
	}
			
	/**
	 * 獲得圖例對象
	 */
	private JFreeChart gainChart() throws IOException{
		JFreeChart chart=ChartFactory.createXXXChart(
				"", 
				"", 
				getDataSet(resultYear,workerid), 
				true, 
				false, 
				false);
		//other code
		return chart;
	}
	//返回一個XXXXDataSet實例
	private XXXDataset getDataSet(){

	//	other code

	}
	
	public JFreeChart getChart() {
		return chart;
	}
	
}

 

<package name="demo" extends="jfreechart-default">
		<action name="Struts2Demo" class="Struts2Demo" method="LoadChart">
			<result type="chart">
				<param name="width">800</param>
				<param name="height">600</param>
			</result>
		</action>
</package>

 

當然要加上Struts2 中的jfreechart 的插件包

 

 

由於時間不夠,先記錄下這些,以後補充。。

 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章