JfreeChart生成报表

合集下载

WEB图表开发系列一:使用JFreeChart生成热点图表

WEB图表开发系列一:使用JFreeChart生成热点图表

WEB图表开发系列一:使用JFreeChart生成热点图表<一>前言:JFreeChart是开放源代码站点上的一个JAVA项目。

它的功能十分强大,能创建饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等,并可生成PNG或JPG图片格式文件。

本人在学习过程中发现,网上很多文章都是讲一些JFreeChart的基本应用,而对JFreeChart生成热点图表这样常用的功能虽有所提及却没有一个完整的例子,所以我就写一个简单示例供大家参考,希望对大家的学习有所帮助。

<二>示例说明:假设有一个关于程序员北京,上海,广洲三地程序员学历,开发语言,薪金情况的调查。

首先要以饼图显示程序员学历的分布情况(index.jsp)。

点击饼图的每一部分会以柱状图显示该层次程序员所用开发语言和薪金的情况(barview.jsp)。

重点演示怎样在饼图上添加链接。

<三>准备工作:1.下载最新版本的JFreeChart,当前为jfreechart-1.0.0-rc1下载地址:/jfreechart/index.html2.解压文件,将jfreechart-1.0.0-rc1/lib下的jcommon-1.0.0-rc1.jar,jfreechart-1.0.0-rc1.jar复制到WEB应用的lib目录下。

3.在web.xml文件中增加以下内容:1.<servlet>2.<servlet-name>DisplayChart</servlet-name>3.<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>4.</servlet>5.<servlet-mapping>6.<servlet-name>DisplayChart</servlet-name>7.<url-pattern>/servletDisplayChart</url-pattern>8.</servlet-mapping><四>饼图页面代码(index.jsp)1.<%@ page contentType="text/html;charset=GBK"%>2.<%@ page import="org.jfree.data.general.DefaultPieDataset"%>3.<%@ page import="org.jfree.chart.*"%>4.<%@ page import="org.jfree.chart.plot.*"%>5.<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>6.<%@ page import="bels.StandardPieItemLabelGenerator"%>7.<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>8.<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>9.<%@ page import="java.io.*"%>10.<HTML>11.<HEAD>12.<META http-equiv=Content-Type content="text/html; charset=GBK">13.<TITLE>nacl_zhuang@</TITLE>14.</HEAD>15.<BODY>16.<%17.18.DefaultPieDataset data = new DefaultPieDataset();19.data.setValue("高中以下",370);20.data.setValue("高中",1530);21.data.setValue("大专",5700);22.data.setValue("本科",8280);23.data.setValue("硕士",4420);24.data.setValue("博士",80);25.26.PiePlot3D plot = new PiePlot3D(data);//3D饼图27.plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//设定链接28.JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);29.chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色30.chart.setTitle("程序员学历情况调查表");//可选,设置图片标题31.plot.setToolTipGenerator(new StandardPieItemLabelGenerator());32.StandardEntityCollection sec = new StandardEntityCollection();33.ChartRenderingInfo info = new ChartRenderingInfo(sec);34.PrintWriter w = new PrintWriter(out);//输出MAP信息35.//500是图片长度,300是图片高度36.String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);37.ChartUtilities.writeImageMap(w, "map0", info, false);38.39.String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename="+ filename;40.41.%>42.43.<P ALIGN="CENTER">44.<img src="<%= graphURL %>"width=500 height=300 border=0usemap="#map0">45.</P>46.</BODY>47.</HTML>生成的图片如下在浏览器中点右键->查看源文件会发现有以下一段HTML代码:1.<map id="map0"name="map0">2.<area shape="poly"coords="247,61,250,61,250,123,250,123"title="博士= 80"alt=""href="barview.jsp?category=博士&pieIndex=0"/>3.<area shape="poly"coords="148,112,153,102,160,92,170,83,182,76,196,70,212,65,229,62,247,61,250,123,250,123"title="硕士= 4,420"alt=""href="barview.jsp?category=硕士&pieIndex=0"/>4.<area shape="poly"coords="324,167,311,173,297,179,282,182,266,185,250,186,234,185,217,183,202,179,188,173,175,167,165,159,1 57,151,151,142,147,132,146,122,148,112,250,123,250,123"title="本科= 8,280"alt=""href="barview.jsp?category=本科&pieIndex=0"/>5.<area shape="poly"coords="307,72,324,80,338,91,347,103,352,117,352,131,347,144,338,156,324,167,250,123,250,123"title="大专= 5,700"alt=""href="barview.jsp?category=大专&pieIndex=0"/>6.<area shape="poly"coords="261,62,285,65,307,72,250,123,250,123"title="高中= 1,530"alt=""href="barview.jsp?category=高中&pieIndex=0"/>7.<area shape="poly"coords="250,61,261,62,250,123,250,123"title="高中以下= 370"alt=""href="barview.jsp?category=高中以下&pieIndex=0"/>8.</map>这就是MAP信息,我们在IMG标签中加入usemap="#map0"就可以为饼图的每一部分加入链接。

JFreeChart_导出图表为PDF格式

JFreeChart_导出图表为PDF格式




简介 什么是Acrobat PDF IText Graphics2D 开始导出 实例应用 查看PDF文件 Unicode字符问题

iText是一个能够快速产生PDF文件的java类库。 iText的主页下载地址是: /iText

简介 什么是Acrobat PDF IText Graphics2D 开始导出 实例应用 查看PDF文件 Unicode字符问题

首先,需要创建一个图表,我们创建一个时序图, 代码如下:

这里没有任何的特殊代码——事实上,可以使用创 建JFreeChart的其他对象替代上面的代码。

JFreeChart画图表时,仅仅使用Graphics2D定 义的方法。这就意味着JFreeChart可以将图表输 出到Graphics2D子类支持的任何设备。

iText 工具融入了PdfGraphics2D的一个类,这 就意味着iText使用Graphics2D类定义的方法产 生 PDF 内容。并且正如你在后面看到的,在PDF 格式中产生图表会变的非常的容易。


Байду номын сангаас
简介 什么是Acrobat PDF IText Graphics2D 开始导出 实例应用 查看PDF文件 Unicode字符问题

为了完成和演示应用实例,我们需要下面的jar文 件:

首先JFreeChart包括两个jar文件,其次iText需 要一个jar文件。




这里使用 Tahoma字体来显示标题。该字体的定义 文件(tahoma.ttf)在系统下面的目录下可以找到。 /opt/sun-jdk-1.4.2.08/jre/lib/fonts 现在使用代码说明,使用iText创建FontMapper 对象来使用Tahoma字体:

使用JfreeChart开发图表经验总结(含源码)

使用JfreeChart开发图表经验总结(含源码)

使用JfreeChart开发图表经验总结(含源码)使用JfreeChart开发图表经验总结(含源码)Keith He 2005年10月27日最近,公司一项目要出很多的图表。

由于项目是B/S架构的,所以生成的图表也要考虑能在浏览器上动态显示。

生成基于浏览器的图表方式比较多。

据我所知道的,常用的有三种:1、VML方式实现。

这种方式是通过产生客户端的代码,由客户端根据代码生成相应的图表。

但这种方式产生的图表有很多的局限性,如受限于浏览器,有些浏览器可能并不支持VML。

另外,没有封装完整的图表开发包。

2、通过applet来产生图表。

这种方式也对客户端要求比较高,必须要有JRE,而且通过applet生成的图表在加载过程中会有个Java的Log动画。

用户看了可能会感觉不太舒服。

3、通过服务端直接生成图表的图片。

这种方式对客户端几乎没有什么要求,缺点是加重了服务端的负担,对服务端要求就相对高了点。

经过比较,根据项目自身特点,我们打算采用第三种方式来开发图表。

为了缩短开发周期、节约成本,我们选用了开源的JFreeChart(/jfreechart/)。

jfreechart是一个免费创建图表的java工具,目前最新版本是JFreeChart-1.0.0-rc1。

它可以生成各式各样的图表。

这些图表包括饼图、柱状图、线形图、区域图、甘特图等等,基本可以满足各种项目的要求。

但在开发过程中我也发现了JFreeChart的一些不足,或者说有些称得上是BUG。

总体说来,JFreeChart还是个优秀的开源项目。

关于JFreeChart生成图表的文章比较多了,我主要谈谈使用JFreeChart的一些比较棘手问题以及解决方法。

同时也会将问题所用到的源码(JFreeChart-1.0.0-rc1+Struts1.2.4)从项目中抽象出来一起提供给大家。

一、图片上热点链接中文乱码的解决方法这个问题是在我查阅关于JFreeChart相关资料时出现频率最高的一个问题。

JFreeChart使用教程(中文)

JFreeChart使用教程(中文)

用JFreeChart增强JSP报表的用户体验JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。

它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。

本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。

一.下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。

其下载地址为:/project/showfiles.php?g roup_id=15494,当前最新版本为1.0.6。

笔者下载的是1.0.6最新版。

说明:1)source目录:为jfreechart的源码目录;2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.6.ja r、gnujaxp.jar和jcommon-1.0.10.jar这三个包;3)根目录下的jfreechart-1.0.6-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。

2. 环境配置笔者的开发环境如下:JDK:1.5MyEclipse:5.1.1 GATomcat:5.5.28为了后续的“用JFreeChart创建基于Web的图表”的一个例子的展示,我们在MyEclipse中创建一个名为jfreechart的Web工程。

将下载的JFreeChart1.0.6下lib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。

另外还需要在web.xml文件中增加如下配置:<servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-clas s></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/DisplayChart</url-pattern></servlet-mapping>二.柱状图在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。

JFREECHART生成各种统计图小结

JFREECHART生成各种统计图小结

JFREECHART生成各种统计图小结JFreeChart生成各种统计图小结JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

在这些不同式样的图表上可以满足目前商业系统的要求。

JFreeChart是一种基于JAVA语言的图表开发技术。

JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文件。

JFreeChart主要是由三个类构成:A)org.jfree.chart.servlet.ChartDeleter继承自HttpSessionBindingListener,用于实现当Session关闭时,删除临时目中的图象文件。

B)org.jfree.chart.servlet.DisplayChart继承自Httpservlet用于处理显示图象。

C)org.jfree.chart.servlet.ServletUtilities有一系列方法,例如,saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile 方法被重载了很多次,用于把文件流发送response。

下面以柱状图和饼图为例,介绍图形创建方法。

1 柱状图org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、createBarChart3D、createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,比较重要的是PlotOrientation.VERTICAL让平行柱垂直显示,而PlotOrientation.HORIZONTAL则让平行柱水平显示。

JFreeChart图形报表制作

JFreeChart图形报表制作
几个令人信服的原因。下面是其中四个最重 要的原因: 1、许可证 购买成本 — 免费。即使您将推 、许可证/购买成本 荐的 JFreeChart 开发人员指南包含一点微薄 的费用,该成本也是极低的,很难与之竞争 。JFreeChart 在 GNU Lesser 一般公用许可 下分发。 2、强大特性 — 如果一个库或框架缺少所 强大特性 需的特性,免费或低成本的许可并不足以让 人选择它。JFreeChart 支持许多不同类型的

JFreeChart 的主要类 和接口 1、JFreeChart 类
JFreeChart 库中最重要的类之一是它本身 ,名为 JFreeChart。该类提供一种 Java 二 维图表的表示。利用该类上的方法,开发人 员可以控制生成的图表的各个方面,并可以 创建表示图表的抽象窗口工具包 (AWT) BufferedImage。您只需非常少的额外工作即 可直接使用 JFreeChart 创建几种简单的图表 类型,但 JFreeChart 却可以提供对代表(如 允许对所生成的图表进行更多控制的 Plot) 的访问。
JFreeChart 的主要类 和接口 3、 XXXXXDataset
数 据集对象,用于提供显示图表所用的数据 。根据不同类型的图表对应着很多类型的数 据集对象类。常用的数据集对象有:柱状图 数据集对象 DefaultCategoryDataset、饼图 数据集对象DefauldPieDataset和曲线图数据 集对象 DefaultTableXYDataset 。 • 5、XXXXXPlot 图表区域对象,基本上这个对象决定着什么 样式的图表,创建该对象的时候需要Axis、
hcce2010第三章面向对象jfreechart交流的内容jfreechart的介绍jfreechart的包类的认知使用jfreechart类的相关方法创建图表常见错误的处理最终的目标会处理一些常见的错误简介俗话说百闻不如一见因为图片可以传达有关难以从文本数据本身获得的数据的重要概述和比较信息

JFreeChart_导出图表为PDF格式

JFreeChart_导出图表为PDF格式


完成上面实例,运行实例,会产生一个PDF文档。 可以使用一个PDF浏览器(比如AcrobatReader (或者其他支持的阅读器,Gnome PDF Viewer)) 查看该文件,显示的界面如下图

大部分的PDF阅读器都提供了缩放技术,以允许更 进一步浏览图表。



简介 什么是Acrobat PDF IText Graphics2D 开始导出 实例应用 查看PDF文件 Unicod表时,仅仅使用Graphics2D定 义的方法。这就意味着JFreeChart可以将图表输 出到Graphics2D子类支持的任何设备。

iText 工具融入了PdfGraphics2D的一个类,这 就意味着iText使用Graphics2D类定义的方法产 生 PDF 内容。并且正如你在后面看到的,在PDF 格式中产生图表会变的非常的容易。

副标题的输出如下图所示。实例已经嵌入到PDF 文件中。因此本文演示的该小程序很好的展示了 这种类型的输出,给出了详细的步骤指南,便于 正确使用。



简介 什么是Acrobat PDF IText Graphics2D 开始导出 实例应用 查看PDF文件 Unicode字符问题

为了完成和演示应用实例,我们需要下面的jar文 件:

首先JFreeChart包括两个jar文件,其次iText需 要一个jar文件。



在JFreeChart和iText中使用Unicode字符集是没有 任何问题的。在上面的例子中需要做一些修改来演 示如何做到这些。
◦ 背景 ◦ 字体、iText和Java ◦ 映射第三方的字体



Java使用同一的字符集译码成文本字符串。这种译码对每个 字符使用16进制。这就意味着将有65,536个有效的不同 字符集(在Unicode标准中定义了大约38,000个字符)。 可以在JFreeChart和iText中使用这些字符,但归于一条:那 就是只要使用字体,包括用来显示的文本或者不显示的,都 必须定义这些字符。许多字体并不完全显示成Unicode字符 集。下面的网站含有那些的确支持 Unicode 的字体的有用 信息:/unifonts.htm 可以成功的提取使用tahoma.ttf字体。实际上,下面实例中 将使用该字体,Tahoma字体并不是支持Unicode定义的每 一个字符。因此,如果想使用一种特殊的字体时,就得必须 选Unicode中一种相近的字体来代替。系统上都安装了字体 Unicode MS(arialuni.ttf)——该字体完全支持Unicode字符 集,尽管这种字体的定义的文件特别大(大约24M)

JFreeChart生成报表并生成PDF文件封装方法使用

JFreeChart生成报表并生成PDF文件封装方法使用

用到的文件:1.JFreeChart2.Itext3.Sturts2调用方法:1.在action中定义属性jfreeChartForm并获取其get和set方法2.在action 中定义接口属性Ijfreechart并获取其get和set方法3.调用接口Ijfreechart中的方法方法/***柱状图的实现**@param doubleList*数据集*@param rowKeys*每列的数据分类*@param columnKeys*列的分类*@param xTitle*x轴标题*@param yTitle*y轴标题*@param chartTitle*图片的标题*@param barColorList*柱子颜色*@param groupColor*图片背景颜色*@param backgroundPaint*柱状图背景颜色*@return文件名称表示成功null表示有错误产生*/String barChart(List<double[]> doubleList, String[] rowKeys, String[] columnKeys, String xTitle, String yTitle,String chartTitle, List<Color> barColorList,Color BackgroundColor, Color backgroundPaint);例子(生成图片如下):Action中的方法public String makeBarGroupChart() {String result = "";// 设置X轴标题String xTitle = "年份";// 设置X轴列名称String[] columnKeys = { "2011", "2012", "2013" };// 设置Y轴标题String yTitle = "设备数量";//初始化数据List<double[]> doubleList = new ArrayList<double[]>();String[] rowKeys = new String[]{"vpp设备","vph设备","工作站主机"};//添加数据doubleList.add(new double[] { 100, 150, 200 });doubleList.add(new double[] { 80, 130, 170 });doubleList.add(new double[] { 120, 170, 220 });// 设置图片标题String chartTitle = "设备数量图";// 获取每个柱子颜色的List<Color> (注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)List<Color> barColorList = new ArrayList<Color>();barColorList.add(new Color(127,255,212));barColorList.add(new Color(220,220,220));barColorList.add(new Color(152,251,152));//定义图片背景颜色Color backgroundColor = Color.white;//定义柱形图颜色Color barColor = new Color(238,220,130);//调用方法生成图片获取返回值String fileName = this.jfreechart.barChart(doubleList, rowKeys, columnKeys, xTitle, yTitle, chartTitle, barColorList,backgroundColor, barColor);this.jfreeChartForm = new JFreeChartForm();this.jfreeChartForm.setFileName(fileName);if(fileName == null || fileName == ""){result = ERROR;}else{result = SUCCESS;}return result;}效果图:在JSP上的调用方法:<imgsrc="${pageContext.request.contextPath}/web/report/images/temp/${jfre eChartForm.fileName}">/***饼状图**@param data*数据集*@param datadescription*数据的业务逻辑*@param chartTitle*图片标题*@param pieKeys*分饼名称*@param pieColorList*分饼颜色*@param pieChartColor*饼图颜色*@param backgroundColor*图片背景色*@return 文件名称表示成功null表示有错误产生*/String createValidityComparePimChar(double[] data,String[] datadescription, String chartTitle, String[]pieKeys,List<Color> pieColorList, Color pieChartColor, ColorbackgroundColor);例子(生成图片如下):Action中的方法public String makePieChart() {String result = "";List<String> userNameList = erName();String[] Keys = new String[]{"vpp设备使用人数","vph设备使用人数","工作站设备使用人数"};//初始化数据double[] doubleList = new double[]{70,50,80};List<Color> barColorList = new ArrayList<Color>();Color backgroundColor = null;Color pieChartColor = null;String fileName =this.jfreechart.createValidityComparePimChar(doubleList, Keys,"饼状图", Keys, barColorList,pieChartColor, backgroundColor);this.jfreeChartForm = new JFreeChartForm();this.jfreeChartForm.setFileName(fileName);if(fileName == null || fileName == ""){result = ERROR;}else{result = SUCCESS;}return result;}效果图:在JSP上的调用方法:<imgsrc="${pageContext.request.contextPath}/web/report/images/temp/${jfre eChartForm.fileName}">/***折线图**@param rowKeys*每条线的数据点*@param columnKeys*X轴上的列名*@param chartTitle*图片标题*@param xName*x轴标题*@param yName*y轴标题*@param xyDataset*数据集*@return 文件名称表示成功null表示有错误产生*/String createTimeXYChar(String[] rowKeys, String[] columnKeys, String chartTitle, String xName, String yName,List<double[]> xyDataset, Color backgroundColor,Color lineChartColor, List<Color> barColorList);例子(生成图片如下):Action中的方法public String makeLineAndShapeChart() {String result = "";String xTitle = "年份";// 设置X轴列名称String[] columnKeys = { "2011", "2012", "2013" };// 设置Y轴标题String yTitle = "设备数量";//初始化数据List<double[]> doubleList = new ArrayList<double[]>();//添加数据String[] rowKeys = new String[]{"vpp设备","vph设备","工作站主机"};doubleList.add(new double[] { 100, 150, 200 });doubleList.add(new double[] { 80, 130, 170 });doubleList.add(new double[] { 120, 170, 220 });List<String> userNameList = erName();//设置图片背景色Color backgroundColor = null;//设置折线图背景色Color LineChartColor = null;//设置线的颜色List<Color> barColorList = new ArrayList<Color>();String fileName = this.jfreechart.createTimeXYChar(rowKeys, columnKeys, "折线图",xTitle, yTitle, doubleList,backgroundColor, LineChartColor, barColorList);this.jfreeChartForm = new JFreeChartForm();this.jfreeChartForm.setFileName(fileName);if(fileName == null || fileName == ""){result = ERROR;}else{result = SUCCESS;}return result;}在JSP上的调用方法:<imgsrc="${pageContext.request.contextPath}/web/report/images/temp/${jfre eChartForm.fileName}">下面是封装的方法:JFreeChart类:package .bis.gms.jfreechart;import java.awt.Color;import java.awt.Font;import java.awt.RenderingHints;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.PageContext;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import ng.StringUtils;import org.apache.struts2.ServletActionContext;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.ValueAxis;import bels.StandardCategoryItemLabelGenerator; import bels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.DefaultFontMapper;import com.lowagie.text.pdf.FontMapper;import .bis.core.base.web.action.BaseAction;import java.awt.Graphics2D;import java.awt.geom.Rectangle2D;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.servlet.ServletUtilities;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import com.lowagie.text.BadElementException;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Element;import com.lowagie.text.Image;import com.lowagie.text.Paragraph;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.DefaultFontMapper;import com.lowagie.text.pdf.FontMapper;import com.lowagie.text.pdf.PdfContentByte;import com.lowagie.text.pdf.PdfPCell;import com.lowagie.text.pdf.PdfPTable;import com.lowagie.text.pdf.PdfTemplate;import com.lowagie.text.pdf.PdfWriter;public class JfreeChart extends BaseAction implements Ijfreechart { public static final long serialVersionUID = 1;private String fileName;/***柱状图的实现**@param doubleList*数据集*@param rowKeys*每列的数据分类*@param columnKeys*列的分类*@param xTitle*x轴标题*@param yTitle*y轴标题*@param chartTitle*图片的标题*@param barColorList*柱子颜色*@param groupColor*图片背景颜色*@param backgroundPaint*柱状图背景颜色*@return文件名称表示成功null表示有错误产生*/public String barChart(List<double[]> doubleList, String[] rowKeys, String[] columnKeys, String xName, String yName, String chartTitle,List<Color> barColorList, Color backgroundColor,Color backgroundPaint) {// 初始化返回值String m_Result = "";// 校验传入的参数是否有误this.verifyInputBarValue(doubleList, rowKeys, columnKeys, xName, yName,chartTitle, barColorList, backgroundColor);// 表示没有存在有错误内容if (super.getFieldErrors().size() == 0) {// 初始化二维数组double[][] data = new double[doubleList.size()][];// 获取数据for (int i = 0; i < doubleList.size(); i++) {data[i] = doubleList.get(i);}// 根据数据获取支持生成图片的数据集CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);// 创建JFreChart对象JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)true, // 是否生成工具true// 是否生成URL链接);// 设置字体格式(整体的字体格式)Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);// 设置文字锯齿chart.setTextAntiAlias(true);chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASIN G,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);// 判断背景图片颜色是否设置if (backgroundColor == null) {// 设置默认颜色backgroundColor = Color.lightGray;} else {// 设置背景色chart.setBackgroundPaint(backgroundColor);}// 创建 plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// 数据轴数据标签的显示格式DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df);// x轴设置CategoryAxis domainAxis = plot.getDomainAxis();// x轴标题domainAxis.setLabelFont(labelFont);// x轴数值domainAxis.setTickLabelFont(labelFont);// 横轴上的Lable是否完整显示domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 设置距离图片左端距离domainAxis.setLowerMargin(0.1);// 设置距离图片右端距离domainAxis.setUpperMargin(0.1);// 设置距离图片顶端距离plot.setDomainAxis(domainAxis);// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)if (backgroundPaint == null) {// 设置默认值plot.setBackgroundPaint(new Color(255, 255, 204));} else {// 将传入的参数设置为背景色plot.setBackgroundPaint(backgroundPaint);}// 设置X轴完毕// y轴设置// 获取y轴ValueAxis rangeAxis = plot.getRangeAxis();// y轴标题字体设置rangeAxis.setLabelFont(labelFont);// y轴数值字体设置rangeAxis.setTickLabelFont(labelFont);// 设置最高的一个 Item 与图片顶端的距离rangeAxis.setUpperMargin(0.2);// 设置最低的一个 Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);// 初始化柱子对象BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.1);// 设置柱子高度renderer.setMinimumBarLength(0.2);// 设置柱子边框颜色renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框可见renderer.setDrawBarOutline(true);// 设置柱的颜色// 判断柱子颜色的List是否设置if (barColorList == null || barColorList.size() == 0) { // 设置默认颜色barColorList = new ArrayList<Color>();barColorList.add(Color.DARK_GRAY);} else {for (int i = 0; i < barColorList.size(); i++) {renderer.setSeriesPaint(i, barColorList.get(i));}}// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.0);// 显示每个柱的数值,并修改该数值的字体属性renderer.setIncludeBaseInRange(true);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(1.0f);// 获取HttpServletResponseHttpServletResponse response =ServletActionContext.getResponse();// 获取HttpServletRequestHttpServletRequest request =ServletActionContext.getRequest();// 解决乱码// X轴文字乱码domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN, 15));// X轴标题乱码domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 17));// Y轴文字乱码rangeAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN, 15));// Y轴标题乱码rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 17));// 标题乱码Font fontTitle = new Font("宋体", Font.PLAIN, 20);TextTitle title = new TextTitle(chartTitle, fontTitle);chart.setTitle(title);// 说明乱码chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 15));try {// 输出流声称图片//ChartUtilities.writeChartAsPNG(response.getOutputStream(),chart, 700, 500);//response.reset();// 将图片保存为pdf格式fileName= barChartToPDF(chart, request, dataset, 500, 400, chartTitle,xName, yName);request.getInputStream().close();} catch (Exception e) {e.printStackTrace();// 设置返回值fileName = null;} finally {try {} catch (Exception e) {e.printStackTrace();// 设置返回值fileName = null;}}} else {fileName = null;}return fileName;}/***饼状图**@param data*数据集*@param datadescription*数据的业务逻辑*@param chartTitle*图片标题*@param pieKeys*分饼名称*@param pieColorList*分饼颜色*@param pieChartColor*饼图颜色*@param backgroundColor*图片背景色*@return SUCCESS表示成功ERROR表示有错误产生*/public String createValidityComparePimChar(double[] data,String[] datadescription, String chartTitle, String[] pieKeys,List<Color> pieColorList, Color pieChartColor, Color backgroundColor) {// 初始化返回值String m_Result = "";verifyInputPieValue(data, datadescription, chartTitle, pieKeys);if (super.getFieldErrors().size() == 0) {// 初始化一个支持生成饼图的数据集DefaultPieDataset dataset = new DefaultPieDataset();// 判断传入的数据是否为空if (data != null && datadescription != null) {// 判断传入的List长度是否和数据名称一样长if (data.length == datadescription.length) {// 遍历List获取数据for (int i = 0; i < data.length; i++) {// 将遍历到的数据加入数据集dataset.setValue(datadescription[i], data[i]);}}}// 创建JFreeChart对象JFreeChart chart = ChartFactory.createPieChart(chartTitle, // 图片标题dataset,// 支持生成饼图的数据集true,// 是否显示图例(对于简单的柱状图必须是false)true,// 是否生成工具false);// 是否生成URL链接// 使下说明标签字体清晰,去锯齿chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASIN G,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(true);// 图片背景色// 判断是否有图片背景色被传入if (backgroundColor == null) {// 设置图片的默认背景色chart.setBackgroundPaint(new Color(250,240,230));} else {// 设置图片背景色味传入的Colorchart.setBackgroundPaint(backgroundColor);}// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);// 获取PiePlot3D对象PiePlot plot = (PiePlot) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色plot.setBaseSectionOutlinePaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。

免费 jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

免费 jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

最近公司使用jfreechart来生成统计图,使用了折线图,饼图等,因为用的1.0.8a版的jfreechart,与1.0.0版本的地方有很多不同,而且图片生成清晰度比老版的高,如下是我做的demo.1.所需包(1) jfreechart-1.0.8a.jar(2) jcommon-1.0.12.jar2.运行环境JDK 1.53.源代码import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.V alueAxis;import bels.StandardCategoryItemLabelGenerator;import bels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.renderer.category.StackedBarRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;/*** 实际取色的时候一定要16位的,这样比较准确** @author new*/public class CreateChartServiceImpl{private static final String CHART_PA TH = "E:/test/";public static void main(String[] args){// TODO Auto-generated method stubCreateChartServiceImpl pm = new CreateChartServiceImpl();// 生成饼状图pm.makePieChart();// 生成单组柱状图pm.makeBarChart();// 生成多组柱状图pm.makeBarGroupChart();// 生成堆积柱状图pm.makeStackedBarChart();// 生成折线图pm.makeLineAndShapeChart();}/*** 生成折线图*/public void makeLineAndShapeChart(){double[][] data = new double[][]{{ 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 },{ 332, 256, 523, 240, 526 } };String[] rowKeys ={ "苹果", "梨子", "葡萄" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createTimeXYChar("折线图", "x轴", "y轴", dataset, "lineAndShap.png"); }/*** 生成分组的柱状图*/public void makeBarGroupChart(){double[][] data = new double[][]{ 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 },{ 332, 256, 523, 240, 526 } };String[] rowKeys ={ "苹果", "梨子", "葡萄" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createBarChart(dataset, "x坐标", "y坐标", "柱状图", "barGroup.png");}/*** 生成柱状图*/public void makeBarChart(){double[][] data = new double[][]{{ 672, 766, 223, 540, 126 } };String[] rowKeys ={ "苹果" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createBarChart(dataset, "x坐标", "y坐标", "柱状图", "bar.png");}/*** 生成堆栈柱状图*/public void makeStackedBarChart(){double[][] data = new double[][]{{ 0.21, 0.66, 0.23, 0.40, 0.26 },{ 0.25, 0.21, 0.10, 0.40, 0.16 } };String[] rowKeys ={ "苹果", "梨子" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createStackedBarChart(dataset, "x坐标", "y坐标", "柱状图", "stsckedBar.png"); }/*** 生成饼状图*/public void makePieChart(){double[] data ={ 9, 91 };String[] keys ={ "失败率", "成功率" };createValidityComparePimChar(getDataPieSetByUtil(data, keys), "饼状图", "pie2.png", keys);}// 柱状图,折线图数据集public CategoryDataset getBarData(double[][] data, String[] rowKeys, String[] columnKeys){return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);}// 饼状图数据集public PieDataset getDataPieSetByUtil(double[] data,String[] datadescription){if (data != null && datadescription != null){if (data.length == datadescription.length){DefaultPieDataset dataset = new DefaultPieDataset();for (int i = 0; i < data.length; i++){dataset.setValue(datadescription[i], data[i]);}return dataset;}}return null;/*** 柱状图**@param dataset 数据集* @param xName x轴的说明(如种类,时间等)* @param yName y轴的说明(如速度,时间等)* @param chartTitle 图标题* @param charName 生成图片的名字* @return*/public String createBarChart(CategoryDataset dataset, String xName,String yName, String chartTitle, String charName){JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);/** V ALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看*///chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(false);chart.setBackgroundPaint(Color.white);// create plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式// x轴设置CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值// Lable(Math.PI/3.0)度倾斜// domainAxis.setCategoryLabelPositions(CategoryLabelPositions// .createUpRotationLabelPositions(Math.PI / 3.0));domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的Lable 是否完整显示// 设置距离图片左端距离domainAxis.setLowerMargin(0.1);// 设置距离图片右端距离domainAxis.setUpperMargin(0.1);// 设置columnKey 是否间隔显示// domainAxis.setSkipCategoryLabelsToFit(true);plot.setDomainAxis(domainAxis);// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)plot.setBackgroundPaint(new Color(255, 255, 204));// y轴设置ValueAxis rangeAxis = plot.getRangeAxis();rangeAxis.setLabelFont(labelFont);rangeAxis.setTickLabelFont(labelFont);// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.05);// 设置柱子高度renderer.setMinimumBarLength(0.2);// 设置柱子边框颜色renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框可见renderer.setDrawBarOutline(true);// // 设置柱的颜色renderer.setSeriesPaint(0, new Color(204, 255, 255));renderer.setSeriesPaint(1, new Color(153, 204, 255));renderer.setSeriesPaint(2, new Color(51, 204, 204));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.0);// 显示每个柱的数值,并修改该数值的字体属性renderer.setIncludeBaseInRange(true);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(1.0f);FileOutputStream fos_jpg = null;try{isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;}catch (Exception e){e.printStackTrace();return null;}finally{try{fos_jpg.close();}catch (Exception e){e.printStackTrace();}}/*** 横向图** @param dataset 数据集* @param xName x轴的说明(如种类,时间等)* @param yName y轴的说明(如速度,时间等)* @param chartTitle 图标题* @param charName 生成图片的名字* @return*/public String createHorizontalBarChart(CategoryDataset dataset,String xName, String yName, String chartTitle, String charName){JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);CategoryPlot plot = chart.getCategoryPlot();// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();//设置刻度必须从0开始// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的// LableFont labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值domainAxis.setMaximumCategoryLabelWidthRatio(0.8f);// 横轴上的Lable 是否完整显示// domainAxis.setVerticalCategoryLabels(false);plot.setDomainAxis(domainAxis);ValueAxis rangeAxis = plot.getRangeAxis();// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.03);// 设置柱子高度renderer.setMinimumBarLength(30);renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的颜色renderer.setSeriesPaint(0, Color.GREEN);renderer.setSeriesPaint(1, new Color(0, 0, 255));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.5);// 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); // 设置柱的数值可见renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(0.6f);FileOutputStream fos_jpg = null;try{isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;}catch (Exception e){e.printStackTrace();return null;}finally{try{fos_jpg.close();}catch (Exception e){e.printStackTrace();}}}/*** 饼状图** @param dataset 数据集* @param chartTitle 图标题* @param charName 生成图的名字* @param pieKeys 分饼的名字集* @return*/public String createValidityComparePimChar(PieDataset dataset,String chartTitle, String charName, String[] pieKeys){JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, // chart// titledataset,// datatrue,// include legendtrue, false);// 使下说明标签字体清晰,去锯齿类似于//chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);的效果chart.setTextAntiAlias(false);// 图片背景色chart.setBackgroundPaint(Color.white);// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);PiePlot3D plot = (PiePlot3D) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色// plot.setBaseSectionOutlinePaint(Color.BLACK);// plot.setBaseSectionPaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。

JFreeChart图表制作

JFreeChart图表制作


两个大的包组成:org.jfree.chart 与org.jfree.data。其中前者主要与图 形本身有关,后者与图形显示的数据有关。 核心类主要有: org.jfree.chart.JFreeChart :图表对象,任何类型的图表的最终表现形 式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个 工厂类用于创建不同类型的图表对象。 org.jfree.data.category.XXXDataSet: 数据集对象,用于提供显示图 表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。 org.jfree.chart.plot.XXXPlot :图表区域对象,基本上这个对象决定着 什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对 象的支持 org.jfree.chart.axis.XXXAxis :用于处理图表的两个轴:纵轴和横轴。 org.jfree.chart.render.XXXRender :负责如何显示一个图表对象。 org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目 的鼠标点击链接。 XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对 应不同类型的工具提示类。
了解JFreeChart 利用JFreeChart生成饼状图 利用JFreeChart生成柱状图 利用JFreeChart生成折线图 利用JFreeChart生成时序图 JFreeChat的Web应用


JFreeChart(/) 是一个开 源的 JAVA 项目,它主要用来开发各种各样的图 表,这些图表包括:饼图、柱状图 ( 普通柱状图 以及堆栈柱状图 ) 、线图、区域图、分布图、混 合图、甘特图以及一些仪表盘等等。在这些不同 式样的图表上可以满足目前商业系统的要求。 JFreeChart 是一种基于 JAVA 语言的图表开发 技术。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 环境中,通过 JDBC 可动态显示任何数据库数据。

JFreeChart绘制报表

JFreeChart绘制报表

JFreeChart常用类介绍 常用类介绍
Plot(接口)
描述:对生成的报表图形进行绘图的功能. 所属类包:org.jfree.chart.plot -CategoryPlot:实现Plot接口,用于折线图, 柱状图的绘图类 -PiePlot:实现Plot接口,用于饼图的绘图类 -XYPlot:实现Plot接口,用于时序图的绘图类
JFreeChart的使用 的使用
数据集的创建:
3,适用于柱形,线形图的数据集 TimeSeriesCollection tsCollection = new TimeSeriesCollection(); TimeSeries ts1 = new TimeSeries("R1"); ts1.add(new TimeSeriesDataItem(new Day(1, 2, 2009), 0.56D)); ts1.add(new TimeSeriesDataItem(new Day(2, 2, 2009), 0.56D)); ts1.add(new TimeSeriesDataItem(new Day(3, 2, 2009), 0.51D)); ts1.add(new TimeSeriesDataItem(new Day(4, 2, 2009), 0.52D)); ts1.add(new TimeSeriesDataItem(new Day(5, 2, 2009), 0.35D)); ts1.add(new TimeSeriesDataItem(new Day(6, 2, 2009), 0.67D)); ts1.add(new TimeSeriesDataItem(new Day(7, 2, 2009), 0.81D)); ts1.add(new TimeSeriesDataItem(new Day(8, 2, 2009), 0.44D));

JFreeChart图表制作

JFreeChart图表制作


实现的思路 1、初始化图表数据 2、获得图表数据集DefaultPieDataset 3、利用chart工厂创建一个jfreechart实例 JFreeChart chart = ChartFactory.createPieChart3D(title, // 图表标题 dataset, // 图表数据集 true, // 是否显示图例 false, // 是否生成工具(提示) false // 是否生成URL链接 ); 4、通过TextTitle类设置饼图的标题与字体: void setFont(Font font)标题字体 void setPaint(Paint paint)标题字体颜色 void setText(String title)标题内容 5、通过LegendTitle类设置图例的字体: void setItemFont(Font font)标题字体 6、获得饼图实例PiePlot,设置饼图参数: void setLabelFont(Font font)标签字体 void setForegroundAlpha(float alpha)指定图片的透明度(0.0-1.0) void setLabelGenerator(PieSectionLabelGenerator generator)分类标 签的格式,设置成null则整个标签包括连接结都不显示 void setStartAngle(double angle)饼图的初始角度
了解JFreeChart 利用JFreeChart生成饼状图 利用JFreeChart生成柱状图 利用JFreeChart生成折线图 利用JFreeChart生成时序图 JFreeChat的Web应用


JFreeChart(/) 是一个开 源的 JAVA 项目,它主要用来开发各种各样的图 表,这些图表包括:饼图、柱状图 ( 普通柱状图 以及堆栈柱状图 ) 、线图、区域图、分布图、混 合图、甘特图以及一些仪表盘等等。在这些不同 式样的图表上可以满足目前商业系统的要求。 JFreeChart 是一种基于 JAVA 语言的图表开发 技术。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 环境中,通过 JDBC 可动态显示任何数据库数据。

使用JFreeChart创建图表

使用JFreeChart创建图表

JFreeChart概述
JFreeChart是开放源代码站点 是开放源代码站点上的一 是开放源代码站点 上的一 项目, 个JAVA项目,它主要用来各种各样的图表,这些图表包括: 项目 它主要用来各种各样的图表,这些图表包括:
Pie charts:饼图 (2D and 3D)、 Bar charts:柱状图 (2D and 3D) Line charts:曲线图 Area charts(区域图)、XY Plots(坐标图)、Time Series Charts(时序图)、 Histograms(直方图)、Difference Chart(方差图)、Step Chart(步骤图)、 Gantt Chart(甘特图)、Multiple Axis Charts、Combined and Overlaid Charts(混合图)等等
柱状图
step1:创建数据集对象
public static CategoryDataset createDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(5000, "北京","易学java"); dataset.setValue(3000, "上海","易学java"); dataset.setValue(2000, "广州","易学java"); dataset.setValue(10000, "北京","JavaWeb整合开发与项目实战"); dataset.setValue(6000, "上海","JavaWeb整合开发与项目实战"); dataset.setValue(4000, "广州","JavaWeb整合开发与项目实战"); dataset.setValue(15000, "北京","易用struts"); dataset.setValue(5000, "上海","易用struts"); dataset.setValue(10000, "广州","易用struts"); dataset.setValue(20000, "北京","精通JSF"); dataset.setValue(10000, "上海","精通JSF"); dataset.setValue(10000, "广州","精通JSF"); return dataset; }

JFreeChart 图表生成实例

JFreeChart 图表生成实例

JFreeChart图表生成实例(饼图、柱状图、折线图、时序图) importjava.awt.BasicStroke;importjava.awt.Color;importjava.io.FileOutputStream;importjava.io.IOException;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServlet;importorg.jfree.data.category.CategoryDataset;importorg.jfree.data.category.DefaultCategoryDataset;importorg.jfree.data.general.DefaultPieDataset;importorg.jfree.data.time.Day;importorg.jfree.data.time.TimeSeries;importorg.jfree.data.time.TimeSeriesCollection;importorg.jfree.data.xy.XYDataset;importorg.jfree.chart.*;importorg.jfree.chart.axis.CategoryAxis;importorg.jfree.chart.axis.DateAxis;importorg.jfree.chart.axis.DateTickUnit;importorg.jfree.chart.axis.DateTickUnitType;importorg.jfree.chart.axis.ValueAxis;importorg.jfree.chart.plot.CategoryPlot;importorg.jfree.chart.plot.PiePlot;importorg.jfree.chart.plot.PlotOrientation;importorg.jfree.chart.plot.XYPlot;importorg.jfree.chart.renderer.category.LineAndShapeRenderer;importorg.jfree.chart.servlet.ServletUtilities;importorg.jfree.chart.title.TextTitle;importcom.lowagie.text.Font;import demo.BarChart3DDemo1;/*** Servlet implementation class ChartDemoServlet*/public class ChartDemoServlet extends HttpServlet {private static final long serialVersionUID = 1L;publicChartDemoServlet() {super();// TODO Auto-generated constructor stub}public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{response.setContentType("image/jpeg");DefaultPieDataset data = getDataSet();CategoryDataset dataset = getDataSet2();DefaultCategoryDatasetlinedataset = createDataset();//JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", data, true, false, false);/**JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是 false)false, // 是否生成工具false // 是否生成 URL 链接);**/JFreeChart chart = ChartFactory.createLineChart("折线图", // 图表标题"时间", // 横轴显示标签"销售额(百万)", // 纵轴显示标签linedataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例标识(对于简单的柱状图必须是 false)true, // 是否生成工具false // 是否生成 URL 链接);/*JFreeChart chart=ChartFactory.createTimeSeriesChart("编程词典全国销量统计", "销售月份", "销量(份)", createtimedata(), false, false, false);*//** jfreechart1.0.13生成的图片中,中文都以方框形式显示,中文乱码解决如下(包括:饼图、柱状图、时序图、折线图)。

使用Jfreechart + pio + itext 生成报表

使用Jfreechart + pio + itext 生成报表

使用Jfreechart + pio + itext 生成报表Jfreechart的各种对象和属性这是一个 JFreeChart 对象,上面的“ chart 标题”是 Title 对象,中间区域是 Plot 对象(包括绘图区域和坐标轴区域),下面的方块区域是 LegendTitle 对象,是一种 SubTitle 对象。

每个 JFreeChart 对象只能有 1 个 Title 对象, 1 个 Plot 对象(图表主体),可以有多个 SubTitle 对象。

JFreeChart 对象可以进行的操作有:背景的设置(背景颜色、背景图片、透明度等)、边框的设置(是否可见、笔画、 Paint 等)、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。

1 、 Plot 对象Plot 对象是图形的绘制结构对象。

JFreeChart 中含有很多不同的 Plot 对象,每一种图形对象中的 Plot 对象都在实例化的时候创建。

所有的 Plot 共有的操作有:背景设置(背景颜色、背景图片、透明度等)、前景透明度设置、无数据存在情况的设置(显示的字符内容、显示的字体、显示的 Paint )、放大缩小比例的设置,大部分 Plot 对象还有设置 Datset 、设置 Renderer 对象操作。

JFreeChart 中有 18 种 Plot 抽象类的具体实现类。

Plot 的具体实现类主要由以下重要对象组成:Renderer 对象(图形的绘制单元——绘图域) Datset (图形的数据源), DomainAxis (区域轴,相当于 x 轴),RangeAxis (范围轴,相当于 y 轴)。

不同的 Plot 对象组成方式不尽相同,有的不含有 Renderer 对象,比如CompassPlot 、 ContourPlot 、 MultiplePiePlot 、 PiePlot 等,有的不含有 DomainAxis 、 RangeAxis 对象,另外除了 FastScatterPlot 类都含有 Datset 对象, FastScatterPlot 使用 float 的二维数组充当数据源。

JFreeChart使用详细教程

JFreeChart使用详细教程

1页

JFreeChart的下载与使用
JFreeChart是开放源代码的图形报表组件(开源 站点上的一个Jave项目),其主页为 /jfreechart/index.html。 在主页中单击DOWNLOAD导航链接将进入下 载页面,选择所要下载的JfreeChart版本即可进行下 载,目前最新版本为1.0.13。 在下载成功后将得到一个名为jfreechart1.0.13.zip的压缩包,此压缩包包含JFreeChart组件源 码、示例、支持类库等文件,将其解压缩后的文件 结构如右图所示。
3页

饼形图:一个划分为几个 饼形图 扇区的圆形图表,用于描述量、 频率或百分比之间的相对关系。 在饼图中,每个扇区的弧长 (以及(圆心角)和面积)大 小为其所表示的数量的比例。 这些扇区合在一起刚好是一个 完全的圆形。顾名思义,这些 扇区拼成了一个切开的饼形图 案。
JFreeChart开发前准备
开发前的准备,JfreeChart开发环境的搭建分为两步:导入 JFreeChart组件包;配置JFreeChart。 1、导入JFreeChart包:导入在lib目录下的jfreechart1.0.13.jar、jcommon-1.0.16.jar两个Jar包到工程。 2、配置JFreeChart: JFreeChart组件能够成.JPEG、.PNG 格式的图片,其输出方式可以直接存储在硬盘中,也可以交给 JFreeChart组件进行管理。在Web应用中,所生成的图形报表一 般均为动态图表,如果对每次生成的图表都进行直接存储,将
14页

通过此方法生成图片后,调用已注册的JFreeChart提供的 Servlet类DisplayChart,即可获取图片的相对路径。 输出图片在Jsp中的应用关键代码如下,可参照该代码将 其运用到servlet或Struts2的Action中。

使用JFreeChart创建基于WEB的图形报表

使用JFreeChart创建基于WEB的图形报表

使用JFreeChart创建基于WEB的图形报表2006-9-29前言为了创建一个可以在web浏览器上查看的图表,一般有下面几种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。

第三种不直接生成图片,而是将流直接送达web浏览器。

第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JA V A的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。

第二种对于图片文件的管理需要考虑。

因此我们下面将介绍一个JA V A的图表引擎JFreeChart用来产生基于WEB的图表。

JFreeChart支持生成的图片和应用系统的交互。

第一章JfeeChart简介,介绍JFreeChart项目情况。

第二章体验JFreeChart,介绍JFreeChart的应用,包括图形和应用交互。

第三章JFeechart 实现Line chart。

第四章JFeechart 实现Bar chart。

第五章JFeechart 实现Pie chart。

第六章部分API。

第一章JFreeChart简介JfreeChart是生成图标的开源软件,功能包括:●pie charts;●bar charts (regular and stacked, with an optional 3D effect);●line and area charts;●scatter plots and bubble charts;●time series, high/low/open/close charts and candle stick charts;●combination charts;●Pareto charts;●Gantt charts;●wind plots, meter charts and symbol charts;●wafer map charts;JfreeChart提供的其他特性:●complete source code is included, under the terms of the GNU Lesser GeneralPublic Licence;●access to data from any source via dataset interfaces;●support for multiple secondary axes and datasets;●tooltips, zooming, printing;●direct export to PNG and JPEG;●export to PDF via iText and SVG via Batik (both described in the JFreeChartDeveloper Guide).●支持servlets, JSP (感谢Cewolf), applets 或者Java Application;●完善的Javadoc文档;第二章体验JFreeChart本章采用JfreeChart的演示程序说明JfreeChart的基本功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、简介WW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。

传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。

但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。

为了能在web浏览器上显示要求用户界面使用 HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。

回到本文的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。

第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。

因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。

二、 JFreeChart项目简介JFreeChart是开放源代码站点上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

这些不同式样的图表基本上可以满足目前的要求。

JFreeChart 是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下:1.JFreeReport :报表解决工具2.JFreeChart:Java 图形解决方案(Application/Applet/Servlet/Jsp)3.JCommon :JFreeReport和JFreeChart的公共类库4.JFreeDesigner :JFreeReport的报表设计工具三、JFreeChart配置安装1 、解压jfreechart-1.0.1.zip.zip到指定位置,其中source是jfreechart 的源码,jfreechart-1.0.1-demo.jar 是例子程序,可以先运行一下看看各种效果,就知道他的nb之处了。

2 、为了配置成功,我们需要关注的文件有如下三个:设置classpath。

加入下面三个jar包。

jfreechart-1.0.1.jar 、jcommon-1.0.0.jar、gnujaxp.jar 加上第三个jar包有时web.xml会报错,把它去掉就好了。

至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。

这里值得提出的是jfreechart的类结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。

如果是中文显示的时候可能依据观感需要改变源码的字体。

四、JFreeChart功能介绍JFreeChart 目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面:pie charts (2D and 3D) :饼图(平面和立体)bar charts (regular and stacked, with an optional 3D effect) :柱状图line and area charts :曲线图scatter plots and bubble chartstime series, high/low/open/close charts and candle s tick charts :时序图combination charts :复合图Pareto chartsGantt charts :甘特图wind plots, meter charts and symbol chartswafer map charts( 态图表,饼图(二维和三维) , 柱状图 ( 水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表)图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联JFreeChart 核心类库介绍:研究jfreechart源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。

其中前者主要与图形本身有关,后者与图形显示的数据有关。

具体研究如果大家有兴趣的话可以自己研究。

核心类主要有:org.jfree.chart.JFreeChart :图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。

JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象org.jfree.data.category.XXXDataSet: 数据集对象,用于提供显示图表所用的数据。

根据不同类型的图表对应着很多类型的数据集对象类org.jfree.chart.plot.XXXPlot :图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持org.jfree.chart.axis.XXXAxis :用于处理图表的两个轴:纵轴和横轴org.jfree.chart.render.XXXRender :负责如何显示一个图表对象org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目的鼠标点击链接XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的不够好,特别是使用中文的时候字体很不清晰。

因为这个原因建议你自己去修改他的源代码,最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。

或多上社区.一下两个类,如果真正与SSH整合,还得给方法的返回值改为JfreeCharts,并屏蔽ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f, chart, 800, 600, null);【只要是有response的都给我屏蔽掉,不然会有空指针的哟】生成饼图的类:public class BingTu {private HttpServletResponse response;private Map<String, String> map;public BingTu(Map map,HttpServletResponse response) {this.map = map;this.response = response;}public void bingtu() throws IOException{response.setContentType("image/jpeg");DefaultPieDataset data = getDataSet();JFreeChart chart = ChartFactory.createPieChart3D("jfreechart", data,true, false, false);chart.getTitle().setFont(new java.awt.Font("黑体", Font.BOLD, 20));// 设置标题字体chart.getLegend().setItemFont(new java.awt.Font("黑体",Font.BOLD, 10));PiePlot3D plot = (PiePlot3D) chart.getPlot(); // 获取图表区域对象plot.setLabelFont(new java.awt.Font("黑体", Font.BOLD, 10));// 图片中显示百分比:默认方式// plot.setLabelGenerator(new//StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT) );// 图片中显示百分比:自定义模式,{0} 表示选项,{1} 表示数字,{2} 表示所占用比例,小数点后两位plot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));// 图例显示百分比:自定义方式,{0} 表示选项,{1} 表示数值,{2} 表示所占比例plot.setLegendLabelGenerator(newStandardPieSectionLabelGenerator("{0}={1}({2})"));ChartUtilities.writeChartAsJPEG(response.getOutputStream(),1.0f,chart, 800, 600, null);}public DefaultPieDataset getDataSet() {DefaultPieDataset dataset = new DefaultPieDataset();for (Iterator iterator = map.entrySet().iterator();iterator.hasNext();) {Entry e = (Entry) iterator.next();dataset.setValue(e.getKey().toString(),Integer.parseInt(e.getValue().toString()));}return dataset;}}生成柱状图的类:public class ZhuZhuangTu {private static Map<String, String> map;public HttpServletResponse response;public ZhuZhuangTu(Map map,HttpServletResponse response) { this.map = map;this.response = response;}public void zhuzhuangtu() throws IOException {CategoryDataset dataset = getDataSet();//CategoryDataset dataset = getDataSet2();JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false// 是否生成URL链接);CategoryPlot plot = chart.getCategoryPlot();// 获取图表区域对象CategoryAxis domainAxis = plot.getDomainAxis();// 水平底部列表domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 14));// 水平底部标题domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));// 垂直标题ValueAxis rangeAxis = plot.getRangeAxis();// 获取柱状rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 15));chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));chart.getTitle().setFont(new Font("黑体", Font.BOLD, 15));FileOutputStream fos_jpg = null;try {// String path = request.getRealPath("temp");// System.out.println(path+"path");// fos_jpg = new FileOutputStream(path+"\fruit.jpg");ChartUtilities.writeChartAsJPEG(response.getOutputStream(),1.0f,c hart,800,600,null);//ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,chart,800,600,null );} finally {try {fos_jpg.close();} catch (Exception e) {}}}/*** 获取一个演示用的简单数据集对象** @return*/private CategoryDataset getDataSet() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Iterator iterator = map.entrySet().iterator();iterator.hasNext();) {Entry entry = (Entry) iterator.next();dataset.addValue(Integer.parseInt(entry.getValue().toString()), "", entry.getKey().toString());}return dataset;}/*** 获取一个演示用的组合数据集对象,用于测试** @return*/private static CategoryDataset getDataSet2() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "北京", "苹果");dataset.addValue(100, "上海", "苹果");dataset.addValue(100, "广州", "苹果");dataset.addValue(200, "北京", "梨子");dataset.addValue(200, "上海", "梨子");dataset.addValue(200, "广州", "梨子");dataset.addValue(300, "北京", "葡萄");dataset.addValue(300, "上海", "葡萄");dataset.addValue(300, "广州", "葡萄");dataset.addValue(400, "北京", "香蕉");dataset.addValue(400, "上海", "香蕉");dataset.addValue(400, "广州", "香蕉");dataset.addValue(500, "北京", "荔枝");dataset.addValue(500, "上海", "荔枝");dataset.addValue(500, "广州", "荔枝");return dataset;}}由于上面两种报表都有一个Map对象,所以使用之前要想方设法把值设置到Map对象中例如:Map map = new HashMap();map.put("JAVA开发", 100);map.put(".NET开发", 200);map.put("PHP开发", 400);map.put("Oracle开发",500);通过类调用里面得方法:BingTu bt = new BingTu(map,response);bt.bingtu();ZhuZhuangTu zzt=new ZhuZhuangTu(map,response);zzt.zhuzhuangtu();如果是要和数据库挂钩就得使用如下方法:Connection con = null;//数据连接对象PreparedStatement pstmt = null;//SQL语句对象ResultSet rs = null;//结果记录集对象String dataName [] = new String[]{"","","","","","","","","","",""};//显示数据系列int dataValueCount[] = {0,0,0,0,0,0,0,0,0,0,0};//数据系列对应的值//String dataName [] = new String [数据的个数,一般是分季度,年份的,不会很多];//显示数据系列//int dataValueCount[] = {对应上面的个数就有多少个0};//数据系列对应的值con = DBCon.getConn();//得到数据库连接对象String sql = "select * from jfreechar";pstmt = con.prepareStatement(sql);rs = pstmt.executeQuery();int i = 0;Map map = new HashMap();while(rs.next()){dataName [i] = rs.getString("name");//数据库中的一个列名,作为一个键dataValueCount[i] = rs.getInt("number");//数据库中的一个列名,作为一个值map.put(dataName[i],dataValueCount[i]);i++;}//显示柱状图//ZhuZhuangTu zzt=new ZhuZhuangTu(map,response);//zzt.zhuzhuangtu();//显示饼图BingTu bt=new BingTu(map,response);bt.bingtu();★★★★★★在这儿使用这个的时候,控制可能会出现异常,那是由于Struts内部的拦截器的作用导致的,这个问题不能避免,我们可以把异常抓住,但不处理它即可。

相关文档
最新文档