报表--JFreeChart
对于一个企业级的应用而言,常常需要生成大量的统计图表,例如饼图,柱状图等。生成这些统计图通常有两种做法:一种是直接使用Applet作为容器来显示这些统计图,或者临时生成统计图的图片,并在HTML页面中显示这些图片。
对于第一种直接使用Applet来装载统计图的形式,需要客户机上安装Java虚拟机,这可能并不是每个浏览者都愿意面对的事情。
JFreeChart让开发者无需自己来处理底层的图形处理细节,借助JFreeChart的帮助,开发者可以非常便捷地开发出各种各样的图表,包括:饼图、柱状图、线图、区域图、分布图、混合图、甘特图及一些仪表盘等。
JFreeChart是一个开源项目,但其文档是付费的。
使用JFreeChart必须使用包有jfreechart-x.jar和jcommon-x.jar。其实x代表版本。
使用JFreeChart开发统计图只要实现下面四个步骤:
1.提供一个Dataset实例,该实例里包含了创建统计图表的数据。
2.使用ChartFactory的多个工厂方法createXXXChart来创建统计图表,统计图表就是一个JFreeChart对象。
3.得到JFreeChart对象后,可以调用setTitle来修改统计图表的标题;或者调用getLegend方法来获得指定索引的图表图例,取得图例对象后即可修改图表的图例。
4.通过JFreeChart对象的getPlot方法,即可获得图表的Plot对象,该对象对应于统计图表的实际图表部分,可以调用Plot对象的方法来修改图表中的各种显示内容。
但在实际开发过程中完成可以只实现前两个步骤,步骤三和步骤四分别是对统计图图例的操作和对统计图显示信息的修改。
现在只使用步骤一和步骤二生成一个简单的统计图示例,具体代码如下:
package com.jack.jfreechart.piechart;import java.awt.Font;import java.io.File;import java.io.FileOutputStream;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.title.LegendTitle;import org.jfree.data.general.DefaultPieDataset;public class PieChartDemo { public PieChartDemo() throws Exception{ //得到数据 DefaultPieDataset data = this.getDataSet(); //生成一个饼图图表对象,参数分别为:饼图标题、数据、是否显示图例、是否显示工具提示、是否生成URL JFreeChart chart = ChartFactory.createPieChart("图书销量统计图", data, true, false, false); //创建一个writebook.jpg的文件 FileOutputStream fos = new FileOutputStream("writebook.jpg"); //创建一个名为savebook.jpg的文件 File file = new File("savebook.jpg"); //对savebook.jpg进行数据的写入及保存 ChartUtilities.saveChartAsJPEG(file, chart, 600, 600); //将数据写入到writebook.jpg文件中// ChartUtilities.writeChartAsJPEG(fos, chart, 600, 600); } //设置要进行统计的数据 public DefaultPieDataset getDataSet(){ DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("Spring2.0宝典", 47000); dataset.setValue("轻量级J2EE企业实战", 38000); dataset.setValue("基于J2EE的Ajax宝典", 31000); dataset.setValue("Javascript权威指南", 29000); dataset.setValue("Ajax in Action", 25000); return dataset; } public static void main(String[] args){ try { PieChartDemo demo = new PieChartDemo(); } catch (Exception e) { e.printStackTrace(); } }}
如果想更深入的理解JFreeChart,请认真研究ChartFactory对象和ChartUtilities对象,这两个对象决定要生成的统计图类型和生成具体的统计图信息。