WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。回到本文的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。
一、JFreeChart项目简介
JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。为了减少篇幅本文主要介绍前面三种类型的图表,读者可以触类旁通去开发其他样式的图表。下面几个是JFreeChart产生的这三种类型图表的结果:
图1
图2
图3
上面的三个图都是表示四个季度的某个产品的销量信息。在继续下面小节之前必须先准备好开发环境,因为是基于WEB浏览器的图表展现,因此需要一个Servlet引擎或者是J2EE应用服务器(例如WebSphere,Tomcat等)。WEB环境的搭建就不累赘了,读者根据喜好自行安装。JFreeChart引擎本身需要到SourceForge.net上下载,地址如下:
JFreeChart主页:http://www.jfree.org/jfreechart/index.html
JFreeChart下载页面:http://sourceforge.net/projects/jfreechart/
下载的时候需要注意的是必须下载两个文件:JFreeChart以及Jcommon。目前最新配套版本是:JFreeChart 0.9.11 Jcommon 0.8.6
这里有点笔者在开发中遇见的问题需要注意的是:在使用Eclipse开发的时候会报一个莫名其妙的错误,错误可能指向某个类文件的第一行。遇到这样的问题一般是因为没有把Jcommon的jar包设置到项目的类路径中的缘故。具体的原因不祥。 (还有log4j等也咬一起导入)。
二、解读JFreeChart的源码结构
在开始使用JFreeChart之前我们有必要先大概了解一下JFreeChart本身的结构以及它所带一些例子程序,这样有助于我们下一步自行开发。下载JFreeChart包后已经带有非常丰富的例子,因为JFreeChart这个项目本身的使用文档非常少,因此学习它最好的办法就是学习它所带的例子源码。在包org.jfree.chart.demo中有几十个文件用于展示JFreeChart所能支持的所有图表的结果。如果你的JDK是比较新的情况下可能在运行这些例子时会有问题,现象如下:
java.lang.UnsatisfiedLinkError: initDDraw
at sun.awt.windows.Win32OffScreenSurfaceData.initDDraw(Native Method)
at sun.awt.windows.Win32OffScreenSurfaceData.<clinit>(Win32OffScreenSurfaceData.java:141)
at sun.awt.Win32GraphicsDevice.<clinit>(Win32GraphicsDevice.java:58)
at sun.awt.Win32GraphicsEnvironment.makeScreenDevice(Win32GraphicsEnvironment.java:168)
at sun.java2d.SunGraphicsEnvironment.getScreenDevices(SunGraphicsEnvironment.java:240)
at sun.awt.Win32GraphicsEnvironment.getDefaultScreenDevice(Win32GraphicsEnvironment.java:61)
at java.awt.Window.init(Window.java:224)
at java.awt.Window.<init>(Window.java:268)
at java.awt.Frame.<init>(Frame.java:398)
at javax.swing.JFrame.<init>(JFrame.java:198)
at org.jfree.chart.demo.JFreeChartDemo.<init>(JFreeChartDemo.java:148)
at org.jfree.chart.demo.JFreeChartDemo.main(JFreeChartDemo.java:285)
Exception in thread "main"
这个错误是由于新版的Swing大量的使用了微软的DirectDraw的技术来提高画图的性能,而可能你的显卡在这时候会跟你闹点情绪或者显卡本身并不支持这样的一个技术。难道就没有办法了嘛?要解决这个问题也非常简单,我们可以屏蔽掉DirectDraw,不让Swing使用该技术就可以了。在运行这些代码时给虚拟机指定参数-Dsun.java2d.noddraw即可。
这时可能你又该纳闷了,不说是基于Web的图表嘛,怎么又扯到Swing上了?这是因为为了使开发者容易上手,无需配置任何运行环境,所以这些例子都是基于GUI方式的用于展现给开发者如果生成一个图表,我们要学习的也就是如何利用这个引擎生成图表而不是怎么来显示一个图表。当我们把生成的图表对象Export到一个图像文件即可在Web上发布。
下面我们来介绍JFreeChart中几个核心的对象类:
<table boder=0>
<tr><td>类名</td><td>类的作用以及简单描述</td></tr>
<tr><td>JFreeChart</td><td>图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象</td></tr>
<tr><td>XXXXXDataset</td><td>数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类</td></tr>
<tr><td>XXXXXPlot</td><td> 图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持</td></tr>
<tr><td>XXXXXAxis</td><td> 用于处理图表的两个轴:纵轴和横轴</td></tr>
<tr><td>XXXXXRenderer</td><td>负责如何显示一个图表对象</td></tr>
<tr><td>XXXXXURLGenerator</td><td> 用于生成Web图表中每个项目的鼠标点击链接</td></tr>
<tr><td>XXXXXToolTipGenerator</td><td> 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类</td></tr>
</table>
基本上我认为JFreeChart项目本身的类结构的设计并不是很好,首先在创建图表的时候用到了大量的工厂方法,这样做虽然可以简化创建图表对象的代码,但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情;其次除图表对象本身外其余的类过于复杂,使用者必须去了解每个类型的图表对象应该对应哪些Axis、Plot、Renderer类,并且必须非常熟悉这些类的构造函数中每个参数的具体含义。这些问题都大大困扰很多初学者。不过,虽然存在很多问题,但是JFreeChart本身仍不失为一个非常优秀的图表引擎,况且项目本身也在逐渐的发展中。
在非常简略的介绍了JFreeChart本身的代码结构后,下面我们开始动手试验几个常用的图表并把他们放到web上。
三、使用JFreeChart生成各种样式的图表
限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。
1 柱状图
[code]package lius.chart.demo;
import java.io.*;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
/**
* 该类用于演示最简单的柱状图生成
* @author Winter Lau
*/
public class BarChartDemo {
public static void main(String[] args) throws IOException{
CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D(
"水果产量图", // 图表标题
"水果", // 目录轴的显示标签
"产量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);
} finally {
try {
fos_jpg.close();
} catch (Exception e) {}
}
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addvalue(100, null, "苹果");
dataset.addvalue(200, null, "梨子");<
分享到:
相关推荐
使用JFreeChart来创建基于web的图表 JFreeChart是一个开放源代码站点SourceForge.net上的一个JAVA项目,主要用来生成各种各样的图表,例如饼图、柱状图、线图、区域图、分布图、混合图、甘特图等等。下面将详细介绍...
本文档主要讲述的是使用 JFreeChart来创建基于web的图表;JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、...
在这个名为"使用 JFreeChart来创建基于web的图表_files"的压缩包中,很显然包含了与在Web环境中利用JFreeChart生成图表相关的资源。 1. **JFreeChart简介** JFreeChart是一个开源项目,它提供了一套完整的API,...
在本篇文章中,我们将深入探讨如何使用JFreeChart这一强大的Java图表库来创建基于Web的图表。通过细致地解析标题、描述以及部分已给出的内容,本文将为读者提供全面而深入的理解,帮助开发者掌握利用JFreeChart进行...
本文介绍了如何使用JFreeChart创建基于Web的图表,并提供了详细的步骤指导。通过掌握JFreeChart的基本用法,你可以轻松地为自己的Web应用程序添加美观且功能强大的图表。无论是饼图、柱状图还是线图,JFreeChart都能...
传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面...因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。
### 基于jfreechart-1.0.6的WEB图表开发示例 #### 一、概述 本文档旨在介绍如何使用jfreechart-1.0.6版本进行Web图表开发,帮助开发者掌握基本及高级图表绘制技巧。JFreeChart是一款强大的开源Java图表库,适用于...
##### JFreeChart创建Web图表的基本原理 当客户端通过浏览器向Web服务器发起请求时,JSP页面将处理请求并调用后端的JavaBean或Servlet组件。这些组件根据前端提供的数据,在Web服务器端生成图表文件(通常是JPEG或...
JFreeChart 是一个强大的 Java 库,专为创建高质量的图表而设计,尤其适用于 Java Web 应用程序。它提供了丰富的图表类型,包括曲线图、柱状图、饼状图、甘特图、雷达图和蜘蛛图等,满足了开发者在数据分析和可视化...
这篇个人测试的博客文章(尽管描述中未提供具体详情)很可能探讨了如何使用JFreeChart进行WEB图表的开发和实现。 首先,JFreeChart的使用通常涉及到以下几个步骤: 1. **引入依赖**:在项目中添加JFreeChart的库...
**使用 JFreeChart来创建基于web的图表.htm** 和 **使用 JFreeChart来创建基于web的图表.files**: 这部分内容可能涉及到如何将JFreeChart集成到Web应用程序中,比如使用Servlet或JSP来生成图表,并在网页上显示。这...
总的来说,这个项目提供了JSP创建基于Web的动态图表的实践案例,涵盖了JFreeChart和Cewolf这两个开源库的使用,以及如何在JSP中实现动态图表的生成和交互。通过学习和研究这些源代码,开发者可以掌握在Web应用中生成...
使用 JFreeChart 生成 SVG 图表非常简单,只需要创建一个 `JFreeSVG` 对象,并将其添加到图表中即可。 ```java import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org....
jfreechart-1.0.0-demo.jar jfreechart-1.0.0.zip JFreeChart-API.chm JFreeChart -- 柱状图.mht JfreeChart.doc JFreeChart0.9.16 ...使用 JFreeChart来创建基于web的图表_IBM.mht 使用JFreeChart创建图象http.mht
通过本章的学习,读者将掌握如何在Tomcat上部署和发布基于JSP/Servlet的Web图表应用程序,为后续的JFreeChart应用打下基础。JFreechart是一个Java库,用于创建各种图表,如饼图、柱状图、线图等,适用于Web应用程序...
以柱状图为例,可以使用JFreeChart创建动态的Web图表。具体步骤如下: 1. **准备数据集**:首先需要创建一个Dataset对象来存储柱状图所需的数据。 2. **创建Plot对象**:根据Dataset创建相应的Plot对象,指定坐标轴...