一、简介:
JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。
二、 JFreeChart中几个核心的对象类:
1、 JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象。
2、 JFreeCDataset:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。
3、 JFreeCPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持。
4、 JFreeCAxis:用于处理图表的两个轴:纵轴和横轴。
5、 JFreeCRenderer:负责如何显示一个图表对象。
6、 JFreeCURLGenerator:用于生成Web图表中每个项目的鼠标点击链接。
7、 JFreeCToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类。
三、此Demo主要针对饼图、柱状图、线图与复合图四种实现方式的演示,现以饼图的实现作为参考其他三种图形实现方式类似。
准备:首先需要在项目中引入俩个相关的jar包:目前的最新版本是jfreechart-1.0.9.jar和jcommon-1.0.12.jar(下载地址http://sourceforge.net/projects/jfreechart/)
在实现饼图的时候需要用到org.jfree.chart.plot包中的PiePlot类与PiePlot3D,前者生成的是平面图后者生成3D效果图。
第一种方式是以生成本地图像的方式来实现。首先创建set数据PieDataset集模拟数据,JFreeChart可根据提供的数据生成平面或是3D效果图片,参数有title、titleFont、plot、createLegend,并可通过设置参数title、titleFont和createLegend来设定图片的标题、标题颜色和是否生成图列,JFreeChart还提供很多其他的方法可执行很多种操作比如setBackgroundPaint();设置背景颜色等等。
最后以输出图片流的方式将图片生成在指定的本地路径上。
代码片段:
DefaultPieDataset data
=
getDataSet();
PiePlot3D plot
=
new
PiePlot3D(data);
JFreeChart chart
=
new
JFreeChart(
""
,JFreeChart.DEFAULT_TITLE_FONT, plot,
true
);
chart.setBackgroundPaint(java.awt.Color.white);
chart.setTitle(
"
水果产量图
"
);

FileOutputStream fos_jpg
=
null
;

try
...
{
fos_jpg = new FileOutputStream("E:/饼图.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 700, 500, null);

}
finally
...
{

try ...{
fos_jpg.close();

} catch (Exception e) ...{
}
}
第二种方式使用applet利用java本身对图形的支持来显示一个图表。需要继承org.jfree.ui.ApplicationFrame并引入Java的swing和awt包。模拟数据集和设置相关参数都与前种方法类似,只是在生成图片的时候需要用到swing包和awt包。
private
static
JFreeChart createChart(PieDataset dataset)
...
{
JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo", dataset, true, true, false );
PiePlot plot = (PiePlot) chart.getPlot();
plot.setSectionOutlinesVisible(false);
plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 10));
plot.setNoDataMessage("No data available");
plot.setSimpleLabels(true);
return chart;

}

public
static
JPanel createDemoPanel()
...
{
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
}

public
static
void
main(String[] args)
...
{
PieChart1 demo = new PieChart1("Pie Chart Demo swing");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
第三种方式在web服务器端生成好图表图片文件后发送给浏览器,将图片显示在浏览器上。首先搭建web环境,创建servlet继承httpServlet,配置web.xml配置文件
<
servlet
>
<
servlet
-
name
>
PieChartServlet
servlet
-
name
>
<
servlet
-
class
>
PieChartServlet
servlet
-
class
>
servlet
>
<
servlet
-
mapping
>
<
servlet
-
name
>
PieChartServlet
servlet
-
name
>
<
url
-
pattern
>/
PieChartServlet
url
-
pattern
>
servlet
-
mapping
>
创建模你数据集和生成图片方法类似,代码片段如下:
public
void
service(ServletRequest req, ServletResponse res)

throws
ServletException, IOException
...
{
res.setContentType("image/jpeg");
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPieChart3D("水果产量图",
data,
true,
false,
false
);
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,400,300,null);
}

private
static
DefaultPieDataset getDataSet()
...
{
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("苹果",100);
dataset.setValue("梨子",200);
dataset.setValue("葡萄",300);
dataset.setValue("香蕉",400);
dataset.setValue("荔枝",500);
return dataset;
}
编译启动tomcat,在浏览器输入http://localhost:8080/PieChartServlet即可在浏览器端生成图片。
遇到的问题:
当导入最新版本的来个jar包jfreechart-1.0.9.jar的时候,生成的图片略显红色背景,通过设置参数调整背景色不起作用;当将jar包换乘旧版本jfreechart-1.0.1.jar时,此情况解决。