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 的插件包

 

 

由于时间不够,先记录下这些,以后补充。。

 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值