分类: Java
2009-12-31 09:57:17
一、简介
JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,是一种Java图形解决方案(Application/Applet/Servlet/Jsp)。
二、安装配置
当前最新版本是jfreechart-1.0.3 ,应下载的包:
jfreechart-1.0.3.zip(项目包)
jfreechart-1.0.3-javadocs.zip(API参考文档)
1、 首先解压jfreechart-1.0.3.zip,并关注三个文件:
jfreechart-1.0.3.jar、 jcommon-1.0.6.jar、gnujaxp.jar(这个包就不导进去了,可能导致警告)
2、 接着把前述三个文件分别考到:
%JAVA_HOME%\LIB及相应项目的\WEB-INF\LIB
3、 配置环境变量CLASSPATH
4、 在\WEB-INF\web.xml文件中加入
三、功能介绍
pie charts (2D and 3D):饼图(平面和立体)
bar charts (regular and stacked, with an optional 3D effect):柱状图
line and area charts:曲线图
time series, high/low/open/close charts and candle stick charts:时序图
图形可以导出成PNG和JPEG格式
四、现已封装的模式有
二维矩状图 三维矩状图 二维饼状图 三维饼状图 线状序列图 时间序列图
五、实现图表生成步骤
1、 Dataset对象的创建生成
2、 JFreeChart对象的创建生成
3、 URLGenerator的控制生成
六、原理
将生成的JFreeChart对象,以流的形式生成用PNG格式或JPEG格式系统临时文件,然后就可以被访问请求。
七、在实现图表生成中可能用到的接口与类
org.jfree.chart.JFreeChart:图表对象类
org.jfree.data.category.XXXDataSet:数据集对象类
org.jfree.chart.plot.XXXPlot图表区域对象类
org.jfree.chart.axis.XXXAxis:轴对象类
org.jfree.chart.render.XXXRender:修饰刷对象类
可参考(API参考文档)
八、实例
1、 获取数据集的方式:
1) 以JDBC方式,通过访问封装类CreateDataSetFromJdbc.java
readPieData(String sql)方法获得饼图数据集
readCategoryData(String sql) 获得矩图数据集
readXYData(String sql) 获得序列表数据集
主要写好相应的sql语句
2) 通过自已的方式获得数据,然后数据集的
setValue(Comparable key, Number value)
setValue(Number value, Comparable rowKey, Comparable columnKey)
2 继承基类BaseChartURLGenerator里的方法及实现接口ControlURLGenerator。(仿照已有的模式)针对web应用
其中会用到封装的方法类ChartPlotRender、CreateChart、LabelGenerator
九、建议
为每一个应用jfreechart图表的模块写一SubChartURLGenerator类(继承自BaseChartURLGenerator)
十、详细情况可以仿照工作量图表处理
十一、 详细设计流程
(1) 获取数据集dataset
判断数据获取是用sql语句组装方便些,还是自己通过其它方式获取,再放到dataset方便些。
如果是前者,可能只需要写好sql,再调用封装好的CreateDataSetFromJdbc就可以获得数据集,这个当然是针对应用数据简单的。
如果是后者,就需要你自己仿照我在质安站工作量查询中的图表处理例子获得相应的dataset,先通过原来自己的方式获得数据,然后写好一个类方法,把传过的数据一个一个的set到数据集中。
(2) 获得图表对象jfreechart
写好一个方法,针对不同的类型的图表,使用封装好的CreateChart类及上步所获得的数据集dataset,生成相应图表。并为图表配入title,citatory,value参数。
(3) 图表对象表现形式
对于web页中引用,则可以考虑新建一个继承自封装的BaseChartURLGenerator类的子类(可以考虑有前两步的方法放到此类中),针对其具体控制,实现接口ControlURLGenerator写好一个控制方法,并引用上步的jfreechart对象,调用已有的方法setChartURL(request, chart);
注意:关于乱码问题:
//使用jfreechart-1.0.10,无需设置,但如果使用jfreechart-1.0.13,需要设置以下字体
// Font font = new Font("黑体",10,20);
// TextTitle tt = chart.getTitle();
// tt.setFont(font);