1、JFreeChart组件,用于图形的开发。
1)到http://www.jfree.org/jfreechart/下载JFreeChart的zip文件,解压后得到的目录的lib子目录中的所有jar包拷贝到Web应用的WEB-INF/lib目录下,完成安装。
2)用JFreeChart创建Web图形需要经过3个步骤:
Œ创建一个包含要在Web图形中显示的数据的数据集对象。
创建一个用于作图的JFreeChart对象。
Ž向目标作图。Web图表的作图目标为response.getOutputStream(),即response对象的输出流。
3)创建一个简单的饼形图:
<%
@ page contentType="text/html;charset=GB2312"
%>
<%
@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,org.jfree.data.general.DefaultPieDataset" %>
<%
//第一步:创建一个包含要在Web图形中显示的数据的数据集对象
/*显示数据系列,也可以从数据库读取数据,构建数据集对象*/
String interest[]=new String[]{"文学","相声","编程","体育","音乐","历史"};
/*数据系列对应的值*/
int interestValue[]={88,73,98,67,56,66};
/*饼形图的数据对象集对象可以是实现了JFfreeChart组件中的PieDataset接口的类的实例,也可以使用JFreeChart组件中已有的已实现了此接口的DefaultPieDataset类,更方便和快捷。*/
DefaultPieDataset pieDataset = new DefaultPieDataset();
for(int i=0;i<interest.length;i++)
pieDataset.setValue(interest[i],interestValue[i]);
//第二步:创建一个用于作图的JFreeChart对象
/*ChartFactory是一个工厂类,可用于创建JFreeChart对象。这里使用的方法是createPieChart()方法,参数作了简单的设置。还有别的方法。*/
String titleString="我的爱好统计图";//图的标题
JFreeChart chart = ChartFactory.createPieChart(titleString,pieDataset,true,true, true);
//第三步:向目标作图。
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,800,500);
%>
4)创建一个简单的条形图:
<%
@ page contentType="text/html;charset=GB2312"
%>
<%
@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"
%>
<%
/**
*用JFreeChart创建条形图需要用实现了CategoryDataset接口
*或IntervalXYDataset接口的类的实例来作为数据集对象,
*常用JFreeChart中自带的已实现了CategoryDataset接口的DefaultCategoryDataset类。
*/
//第一步:创建一个包含要在Web图形中显示的数据的数据集对象
String dataName[]=new String[]{"文学","相声","编程","体育","音乐","历史"};//显示数据系列
int dataValueCount[]={88,73,98,67,56,66};//数据系列对应的值
//------创建数据集,并设置值------
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
for(int i=0;i<dataName.length;i++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);
//第二步:创建一个用于作图的JFreeChart对象
String titleString="我的爱好统计图";//图的标题
/**
*createBarChart方法中的参数依次为图形标题、分类轴标签(默认为横向)、
*数值轴标签(默认为纵向)、数据集、图形显示方向、是否显示图例、是否有工具条、是否有URL
*/
JFreeChart chart = ChartFactory.createBarChart(titleString,"爱好","爱它几分",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);
//第三步:向目标作图。
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);
%>
注:条形图的显示也可以作一些定制性的修改,常用的修改方法:
Œ修改图形的背景颜色:chart.setBackgroundPaint(new Color(#BBBBDD));
修改图形的柱状条颜色。需要使用setCategoryPlot()方法,它非JFreeChart类所有,需要先用JFreeChart类的实例的getCategoryPlot()方法得到一个CategoryPlot对象,再用CategoryPlot对象的getRenderer()方法得到一个BarRenderer对象,用此对象的setSeriesPaint()方法来设置柱状条的颜色,如
CategoryPlot plot
=
chart.getCategoryPlot();
BarRenderer renderer
=
(BarRenderer)plot.getRenderer();
renderer.setSeriesPaint(
0
,Color.red);
renderer.setSeriesPaint(
1
,Color.yellow);
renderer.setSeriesPaint(
2
,Color.green);
Ž柱状条的间距。JFreeChart允许修改类型轴的一些设置,如:
§第一条柱状条与数值轴之间的空白间隔距。
§柱状条之间的空白间距。
§最后一条柱状条后空白距离。此三项的设置方法示例:
CategoryPlot plot
=
chart.getCategoryPlot();
CategoryAxis axis
=
plot.getDomainAxis();
axis.setLowerMargin(
0.01
);
//
百分这二
axis.setCategoryMargin(
0.10
);
//
百分之十
axis.setUpperMargin(
0.02
);
//
百分之二
5)创建线形图:
<%
@ page contentType
=
"
text/html;charset=GB2312
"
%>
<%
@ page
import
=
"
org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset
"
%>
<%
/** */
/**
*JFreeChart创建线形图使用的数据集可以是CategoryDataset接口
*或XYDataset的实现类的实例。
*/
//
------数据线------
String dataLine1
=
"
物理
"
;
String dataLine2
=
"
化学
"
;
String dataLine3
=
"
数学
"
;
//
------数据列------
String dataCol1
=
"
1
"
;
String dataCol2
=
"
2
"
;
String dataCol3
=
"
3
"
;
String dataCol4
=
"
4
"
;
String dataCol5
=
"
5
"
;
String dataCol6
=
"
6
"
;
//
------创建数据集,并设置值------
DefaultCategoryDataset categoryDataset
=
new
DefaultCategoryDataset();
categoryDataset.addValue(
60
,dataLine1,dataCol1);
categoryDataset.addValue(
70
,dataLine1,dataCol2);
categoryDataset.addValue(
83
,dataLine1,dataCol3);
categoryDataset.addValue(
90
,dataLine1,dataCol4);
categoryDataset.addValue(
92
,dataLine1,dataCol5);
categoryDataset.addValue(
85
,dataLine1,dataCol6);
categoryDataset.addValue(
63
,dataLine2,dataCol1);
categoryDataset.addValue(
45
,dataLine2,dataCol2);
categoryDataset.addValue(
67
,dataLine2,dataCol3);
categoryDataset.addValue(
76
,dataLine2,dataCol4);
categoryDataset.addValue(
90
,dataLine2,dataCol5);
categoryDataset.addValue(
87
,dataLine2,dataCol6);
categoryDataset.addValue(
50
,dataLine3,dataCol1);
categoryDataset.addValue(
76
,dataLine3,dataCol2);
categoryDataset.addValue(
84
,dataLine3,dataCol3);
categoryDataset.addValue(
96
,dataLine3,dataCol4);
categoryDataset.addValue(
88
,dataLine3,dataCol5);
categoryDataset.addValue(
80
,dataLine3,dataCol6);
//
------创建线图------
String titleString
=
"
XXXXXX学生成绩线图
"
;
//
图的标题
JFreeChart chart
=
ChartFactory.createLineChart(titleString,
"
第几次考试
"
,
"
成绩
"
,
categoryDataset,PlotOrientation.VERTICAL,
true
,
true
,
false
);
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,
500
,
300
);
%>
6)JFreeChart中常用的几个包:
Œorg.jfree.chart:这个包包含了JFreeChart最为重要的也是为常用的几个类和接口。
org.jfree.chart.data:数据集相关的接口和类。
Žorg.jfree.chart.plot:绘图相关的类和接口。
org.jfree.chart.data.general:常用的数据集相关的接口和类。
7)开发中最为常用的几个类或接口:
ŒJFreeChart类。这个类在org.jfree.chart包中,用于协调整个画图的处理过程。生成这个类通常使用ChartFactory类。它的主要方法有:public void draw(Graphics2D g2,Rectang2D area)此方法用于在图形设备的特定区域画图。参数g2代表一个图形,area为包容这个图形的矩形容器。java中提供的图形设备有:屏幕、打印机、图形缓冲区。JFreeChart绘图是由不同的java.awt.Graphics2D包中的抽象类实现的,只有利用它们,JFreeChart才能向不同的图形设备输出图形。
ChartFactory类。这是一个工厂类,即org.jfree.chart.ChartFactory,它提供了一些比较方便的创建图形对象的方法。此类常用的方法有:public static JFreeChart createPieChart(String title,PieDataset dataset,boolean legend,boolean tooltips,boolean urls),此方法用于创建一个标准的饼图。title是标题;dataset是创建饼形图所使用的特定数据集(可为空);legend表示是否为一个图例;tooltips用于配置图形是否生成提示信息;urls配置图形是否生成URL。public static JFreeChart createBarChart(String title,String categoryAxisLabel,String tvalueAxisLabbel,CategoryDataset dataset,PlotOrientation orientation,boolean legend,boolean tooltips,boolean urls)此方法用于生成条形图。public static JFreeChart createLineChart(String title,String categoryAxisLabel,String valueAxisLabel,CategoryDataset dataset,PlotOrientation orientation,boolean legend,boolean tooltips,boolean urls),其中categoryAxisLabel指出横向轴(分类轴)的提示字符串,valueAxisLabel指出横向轴(值轴)的提示字符串,orientation指出条形图为横向还是竖向。
ŽChartUtilities类。它在org.jfree.chart包中,能过可从chart对象生成PNG格式或JPEG格式的图片,也可生成带有点击范围的HTML图片,这些方法都是表态是静态的。
writeChartAsPNG(java.io.OutputStream out, JFreeChart chart, int width, int height)
throws java.io.IOException
writeChartAsJPEG(java.io.OutputStream out, JFreeChart chart, int width, int height)
throws java.io.IOException
writeChartAsJPEG(java.io.OutputStream out, JFreeChart chart, int width, int height, ChartRenderingInfo info)
throws java.io.IOException
PlotOrientaion类,它在包中,用于表示图形的显示方向,主要有两属性:public static final PlotOrientation HORIZONTAL(横向)与public static final PlotOrientation VERTICAL(纵向)。
DefaultCategoryDataset接口,它在org.jfree.data.category 包中,这是一个默认情况下的使用的分类数据集接口。构造函数:public DefaultCategoryDataset()生成个空的数据集。
addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)
setValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)
两者功能相同,向数据中增加值,如果这个数据已存在则覆盖它。