JFreeChart组件在基于JSP的Web统计图表中的应用与实现

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

JFreeChart 组件在基于 JSP 的 Web 统计图表中的应用与实现

2010/04/25 0 JFreeChart 组件在基于 JSP 的 Web 统计图表中的应用与实现 摘 要:本文以实际项目中问题的需求,在分析了 JFreeChart 组件结构的基础上, 以柱状图为例,详细介绍了其在 JSP 中开发基于 Web 的统计图表的方法。关键词: JFreeChart Web 图表 JSP1 概述创建一个可以在 Web 浏览器上查看的图表一般有两 种做法:第一种是使用 Applet 利用 Java 本身对图形的支持来显示一个图表;第二种 是直接在 Web 服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于 客户端要求太高,这种方式比较适合局域网的应用,而对于因特网的环境就显得不 太适合了。本文介绍的是一个基于 Java 的图表引擎 JFreeChart,他可用在服务器端 产生图表。JFreeChart 是开放源代码站点 SourceForge 上的一个 Java 项目,它主要用 来开发生成各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱 状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。本文主要以 柱状图为例介绍其使用方法,基于此可以去开发其他样式的图表。2 环境和资源在 之前必须先准备好开发环境,因为是基于 Web 浏览器的图表展现,因此需要一个 Servlet 引擎或者是 J2EE 应用服务器。本文的 JSP 环境是 Tomcat 5.0+jdk1.5.0,具体 配置不在此详述。JFreeChart 可以到 jfree/jfreechart/站点下载,当前最新版本是 1.0.0,本文以 0.9.11 版本进行调试,其核心对象类如表 1 所示。表 1 JFreeChart 中 核心的对象类 类名类的作用以及简单描述 JFreeChart 图表对象,任何类型的图表的 最终表现形式都是在该对象进行一些属性的定制。JFreeChart 引擎本身提供了一个 工厂类用于创建不同类型的图表对象 XXXXXDataset 数据集对象,用于提供显示图 表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类 XXXXXPlot 图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要 Axis、Renderer 以及数据集对象的支持 XXXXXAxis 用于处理图表的两个轴:纵轴 和横轴 XXXXXRenderer 负责如何显示一个图表对象 XXXXXURLGenerator 用于生 成 Web 图表中每个项目的鼠标点击链接 XXXXXToolTipGenerator 用于生成图象的 帮助提示,不同类型图表对应不同类型的工具提示类解压缩文件 jfreechart-0.9.11,

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

jfreechart-0.9.11.jar 和 lib/jcommon-0.8.6.jar,lib/gnujaxp.jar,是开发运行需要的文

件,把这三个文件放置到应用的 lib 目录下。然后在 web.xml 文件中配置以下内容: Servlet

Servlet-name

Display

Chart

/servlet-name

Servlet-class

org.jfree.chart.servlet.DisplayChart /servlet-class /servlet 安装配置完成,就可以编写程 序来生成所需统计图。3 使用 JFreeChart 生成柱状图表首先看一个最简单的例子, 图片中的各类属性都采用默认值。 charset=GBK”%

%@

%@ Page

Page

content

Type=“text/html;

import=“org.jfree.chart.ChartFactory, org.jfree.chart.plot.PlotOrientation, org.jfree.data.DefaultCategoryDataset”%

org.jfree.chart.JFreeChart,

org.jfree.chart.servlet.ServletUtilities,

TfaultCategoryDataset dataset = new

DefaultCategoryDataset();dataset.addValue(32,

“大观圆”, “已售”);dataset.addValue(18, “大观圆”, “待售”);dataset.addValue(18, “大观 圆”, “预订”);dataset.addValue(28, “大观圆”, “认购”);dataset.addValue(8, “大观圆”, “预 留”);JFreeChart chart = ChartFactory.createBarChart3D(“房屋销量统计图”,”房屋状 态”,”销量”,dataset, PlotOrientation.VERTICAL, False,false,false);String filename = ServletUtilities.saveChartAsPNG(chart, 300, 260, null, session);String graphURL =request.getContextPath()+”/servlet/DisplayChart?filename=“+filename;%

Imgsrc=“

%=graphURL% “width=500 height=300 border=0 use map=“# %=filename% “ 图 2 简 单柱状图 图 3 组合数据集图 此 JSP 程序的运行结果如图 2 所示。

上面的程序简单,但生成的柱状图也很简单。更多的时候,我们可能需要不同的 效果。

org.jfree.chart.ChartFactory

这个工厂类有

createBarChart,

createStackedBarChart, createBarChart3D, createStackedBarChart3D 这几个工厂方法用 于创建不同类型的柱状图。关于这四个方法的 JFreeChart 的 Java Doc API 文档有 详细说明,比较重要的是

PlotOrientation.VERTICAL

让平行柱垂直显示,而

PlotOrientation.HORIZONTAL 则让平行柱水平显示。几个对柱状图影响较大的几个 类,它们分别是:

org.jfree.chart.axis.CategoryAxisorg.jfree.chart.axis.ValueAxisorg.jfree.chart.renderer.Bar

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

Rendererorg.jfree.chart.renderer.BarRenderer3D 我们通过程序看其效果。 %@ Page import=“java.awt.Color, Java.awt.Font, Org.jfree.chart % %Double [][] data=new double [][]{{34, 16, 23, 26, 9}, {12, 35, 10, 34, 26}, {23, 16, 33, 24, 26}};String[] row Keys = {“已售”,”待售”,”订购”};String {“A#”,”B#”,”C#”,”D#”,”E#”};Category

[]

column

Keys

= Dataset

dataset=DatasetUtilities.createCategoryDataset (rowKeys, columnKeys, data);//创建 JFreeChart,都使用 Chart JFreeChart

chart

=

Factory 来创建 JFreeChart,很标准的工厂设计模式 ChartFactory.createBarChart3D(“大观圆销量图统

true,

WHITE);Category domain

Axis

=

Plot

false, plot

=

计”,null,null,dataset,PlotOrientation.VERTICAL, false);Chart.setBackgroundPaint chart.getCategoryPlot

();Category

(Color. Axis

plot.getDomainAxis

();domainAxis.setVerticalCategoryLabels(false);Plot.setDomainAxis (domainAxis);ValueAxis

range

Axis

=

plot.getRangeAxis

();rangeAxis.setUpperMargin(0.15); //设置最高的一个 Item 与图片顶端的距离//设置 最低的一个

Item

与图片底端的距离

rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer3D renderer =

new

BarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);renderer.setWallPaint(Col or.gray); //设置 Wall 的颜色//设置每种水果代表的柱的颜色 renderer.setSeriesPaint(0, Color.RED);renderer.setSeriesPaint(1, new Color (0, 100, 255));renderer.setSeriesPaint(2,

Color. GREEN);renderer.setItemMargin(0.1); //设置每个地区所包含的平行柱的之间距 离//显示每个柱的数值,并修改该数值的字体属性 renderer.setItemLabelGenerator(new

StandardCategoryItemLabelGenerator());renderer.setItemLabelsVisible(true);plot.setRend erer(renderer);plot.setForegroundAlpha(0.6f); //设置柱的透明度//设置地区、销量的显 示位置

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4