随笔-179  评论-666  文章-29  trackbacks-0

前段时间,也就是去年,在做一个项目的时候有这样一个需求,根据用户在web页面上向服务器提交的数据,根据条件从数据库中取出相应的一系列数据后,要能在web浏览器上以图表的形式显示结果,形成直观的对比,于是就要我们实现饼图,柱图的动态生成。在网上找了很久,找到了jfreechart这么一个东西。

jfreechart
是一个开源的 java 项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 ) 、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业系统的要求。 jfreechart 是一种基于 java 语言的图表开发技术。 jfreechart 可用于 servlet jsp applet java appication 环境中,通过 jdbc 可动态显示任何数据库数据,结合 itext 可以输出至 pdf 文件。

这个东西正符合我们的需求,于是对他进行了研究并试验。前些时间懒,一直没有把研究测试心得写出来,现在闲下来,整理了一下,搞两个例子放上来供大家参考吧。


一、饼图实例

jsp页面:index.jsp

<%@ page contenttype="text/html;charset=gbk"%>
<%@ page import="org.jfree.data.general.defaultpiedataset"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%@ page import="org.jfree.chart.servlet.servletutilities"%>
<%@ page import="org.jfree.chart.labels.standardpietooltipgenerator"%>
<%@ page import="org.jfree.chart.urls.standardpieurlgenerator"%>
<%@ page import="org.jfree.chart.entity.standardentitycollection"%>
<%@ page import="java.io.*"%>

<html> 
<head> 
<meta http-equiv=content-type content="text/html; charset=gbk"> 
<meta name="author" content="alpha">
<title>程序员学历情况调查表-by alphatitle> 
head> 
<body> 
<%
            defaultpiedataset data 
= new defaultpiedataset(); 
            
//数据初始化
            data.setvalue(
"高中以下",380); 
            data.setvalue(
"高中",1620); 
            data.setvalue(
"大专",6100); 
            data.setvalue(
"本科",8310); 
            data.setvalue(
"硕士",3520); 
            data.setvalue(
"博士",180); 
            
            
//httpsession session = request.getsession();

            pieplot3d plot 
= new pieplot3d(data);//生成一个3d饼图 
            
//plot.seturlgenerator(new standardpieurlgenerator("degreedview.jsp"));//设定图片链接 
            jfreechart chart 
= new jfreechart("",jfreechart.default_title_font, plot, true); 
            chart.setbackgroundpaint(java.awt.color.white);
//可选,设置图片背景色 
            chart.settitle(
"程序员学历情况调查表-by alpha");//可选,设置图片标题 
            plot.settooltipgenerator(
new standardpietooltipgenerator()); 
            standardentitycollection sec 
= new standardentitycollection(); 
            chartrenderinginfo info 
= new chartrenderinginfo(sec); 
            printwriter w 
= new printwriter(out);//输出map信息 
            
//500是图片长度,300是图片高度
            
//string filename = servletutilities.savechartaspng(chart,500,300,info,session); 
            
string filename = servletutilities.savechartasjpeg(chart,500,300,info,session); 
            chartutilities.writeimagemap(w,
"map0",info,false); 

            
string graphurl = request.getcontextpath()  "/servlet/displaychart?filename="  filename;
%> 

<align="center"> 
<img src="<%= graphurl %>" width=500 height=300 border=0 usemap="#map0"> 
p> 
body> 
html>

本例效果图:



二、柱图实例

jsp页面:index1.jsp

<% @page contenttype = " text/html; charset=gb2312 " %>

<% @page import = " java.io.filenotfoundexception " %>
<% @page import = " java.io.fileoutputstream " %>
<% @page import = " org.apache.commons.logging.log " %>
<% @page import = " java.io.ioexception " %>

<% @page import = " org.apache.commons.logging.logfactory " %>
<% @page import = " org.jfree.chart.chartfactory " %>
<% @page import = " org.jfree.chart.chartutilities " %>
<% @page import = " org.jfree.chart.jfreechart " %>
<% @page import = " org.jfree.chart.plot.plotorientation " %>
<% @page import = " org.jfree.data.category.categorydataset " %>
<% @page import = " org.jfree.data.category.defaultcategorydataset " %>

<% @page import = " java.awt.color " %>
<% @page import = " org.jfree.chart.renderer.category.barrenderer3d " %>
<% @page import = " org.jfree.chart.labels.standardcategoryitemlabelgenerator " %>
<% @page import = " org.jfree.chart.axis.categoryaxis " %>
<% @page import = " org.jfree.chart.plot.categoryplot " %>

<%
  defaultcategorydataset dataset    
=   new  defaultcategorydataset();
  dataset.addvalue(
150 " 北京 " " 苹果 " );
  dataset.addvalue(
530 " 上海 " " 苹果 " );
  dataset.addvalue(
160 " 广州 " " 苹果 " );
  dataset.addvalue(
120 " 北京 " " 梨子 " );
  dataset.addvalue(
230 " 上海 " " 梨子 " );
  dataset.addvalue(
360 " 广州 " " 梨子 " );
  dataset.addvalue(
600 " 北京 " " 葡萄 " );
  dataset.addvalue(
430 " 上海 " " 葡萄 " );
  dataset.addvalue(
560 " 广州 " " 葡萄 " );
  dataset.addvalue(
400 " 北京 " " 香蕉 " );
  dataset.addvalue(
530 " 上海 " " 香蕉 " );
  dataset.addvalue(
660 " 广州 " " 香蕉 " );
  dataset.addvalue(
500 " 北京 " " 荔枝 " );
  dataset.addvalue(
630 " 上海 " " 荔枝 " );
  dataset.addvalue(
430 " 广州 " " 荔枝 " );
  
    jfreechart chart 
=  chartfactory.createbarchart3d( " 水果销量图统计-by alpha " , " 水果种类-http://www.blogjava.net/alpha/ " , " 销量 " ,dataset,plotorientation.vertical, true , false , false );
        chart.setbackgroundpaint(color.white);
        categoryplot plot 
=  chart.getcategoryplot();

        categoryaxis domainaxis 
=  plot.getdomainaxis();
        
// domainaxis.setverticalcategorylabels( false );
        plot.setdomainaxis(domainaxis);

        barrenderer3d renderer 
=   new  barrenderer3d();
        renderer.setbaseoutlinepaint(color.black);

        
// 设置每个地区所包含的平行柱的之间距离
        renderer.setitemmargin(
0.1 );
        
// 显示每个柱的数值,并修改该数值的字体属性
        renderer.setitemlabelgenerator(
new  standardcategoryitemlabelgenerator());
        renderer.setitemlabelsvisible(
true );
        plot.setrenderer(renderer);

        
//  设置柱的透明度
        plot.setforegroundalpha(
0 .8f);

    chartutilities.writechartasjpeg(response.getoutputstream(),chart,
640 , 400 );
%>


本例效果图:




三、服务配制

   
web.xml文件的配制一直困扰了我很久,之前在网上找到的配制都是有问题的,搞得生成出来的图形显示不出来,后来自己才把这个配制研究成功,网上的东西也很不可靠,找了n多配制,都是一样的,同现同样的问题,看来都是转来转去的结果 。

web.xml 文件

xml version="1.0" encoding="iso-8859-1" ?>

doctype web-app
    public "-//sun microsystems, inc.//dtd web application 2.3//en"
    "http://java.sun.com/dtd/web-app_2_3.dtd"
>

< web-app >

    
< servlet >
        
< servlet-name > displaychart servlet-name >
        
< servlet-class > org.jfree.chart.servlet.displaychart servlet-class >
    
servlet >
    
< servlet-mapping >
        
< servlet-name > displaychart servlet-name >
        
< url-pattern > /servlet/displaychart url-pattern >
    
servlet-mapping >

    
< welcome-file-list >
        
< welcome-file > index.jsp welcome-file >
    
welcome-file-list >
    
web-app >


补充:(07.5.4更新)
新增甘特图的例子与上面例子所有源代码一起打包提供下载,下载后直接部署就可以运行了。





posted on 2007-01-13 11:08 alpha 阅读(22419) 评论(29)     所属分类: java j2ee jsp

评论:
# re: jfreechart在jsp中的应用实例 2007-01-14 02:13 |
blogjava最近很是死寂,怎么这个文章都敢放到凯发k8网页登录首页了呢!  回复  
  
# re: jfreechart在jsp中的应用实例 2007-01-14 23:07 |
挺好的!  回复  
  
# re: jfreechart在jsp中的应用实例 2007-02-07 15:42 |
嗯,真不错  回复  
  
# re: jfreechart在jsp中的应用实例 2007-04-18 17:26 |
非常不错,谢谢楼主
  回复  
  
# re: jfreechart在jsp中的应用实例[未登录] 2007-04-20 18:11 |
你好,请问怎么实现甘特图呢?

我的毕业设计要用到.

请回复到我的邮箱1919wang@163.com



非常感谢!!  回复  
  
# re: jfreechart在jsp中的应用实例 2007-04-29 16:10 |
请问lz,我怎样把这个程序调试出来,因为我要用到柱状图显示,具体怎么流程没,lz好人做到底,给我讲讲吧  回复  
  
# re: jfreechart在jsp中的应用实例 2007-04-30 13:02 |
您好!
我的毕业设计要用那jfreechart做动态图形显示包,请你帮我发个简单的包,谢谢你了,我的邮箱是luyuan1031@sina.com  回复  
  
# re: jfreechart在jsp中的应用实例 2007-05-04 10:44 | alpha
已将这两个例子的源代码打包放上来了,另新增甘特图的例子一起打包,下载后直接部署就可以运行了。
下载地址:


  回复  
  
# re: jfreechart在jsp中的应用实例 2007-05-22 11:10 |
mu~~~a~~~~表扬户主,省了我很多工夫,再亲  回复  
  
# re: jfreechart在jsp中的应用实例 2007-05-22 11:30 |
下载包解压发布,index.jsp和index2.jsp都可以用,但index1.jsp不能用,跑错:

?jfifc    $.' ",#(7),01444'9=82<.342c  2!!22222222222222222222222222222222222222222222222222?€" ?}!1aqa"q2亼?#b绷r佯$3br? %&'()*456789:cdefghijstuvwxyzcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウж┆渤吹斗腹郝媚牌侨墒矣哉肿刭卺忏溴骁栝犟蝮趱鲼? ?w!1aqaq"

(后略)…………………………  回复  
  
# re: jfreechart在jsp中的应用实例 2007-05-25 10:13 |
多谢大人的帖子,看了好久的网页终于发现一个可以用的例子了~~
大大的感谢~~  回复  
  
# re: jfreechart在jsp中的应用实例 2007-06-10 17:57 |
有人知道为什么我在tomcat和jbuild 下运行这些例子图片都显示不出来是为什么啊,就显示个方框有个小红差,就象有时网页打不开那种效果,有人知道是为什么吗,楼主帮下忙啊, 万分感谢!!!  回复  
  
# re: jfreechart在jsp中的应用实例[未登录] 2007-06-13 13:00 |
哪有jfreechart工具包  回复  
  
# re: jfreechart在jsp中的应用实例 2007-06-15 23:40 | alpha
@junlien

应该是web.mxl配制有问题,以前我也遇到过此问题。
检查一下< url-pattern > /servlet/displaychart 这个配制。

@robert
我提供的下载里有包含jfreechart工具包,在lib里面。
  回复  
  
# re: jfreechart在jsp中的应用实例[未登录] 2007-07-06 09:47 |
先從資料庫中提取資料生成xml,如何從xml中提取資料,生成動態jfreechart圖形,然后在jsp上顯示,圖形要根據xml生成的表格中的數據動態變化,  回复  
  
# re: jfreechart在jsp中的应用实例 2007-08-24 08:29 |
谢谢作者! 这是网上能用的案例. 加20分  回复  
  
# re: jfreechart在jsp中的应用实例 2007-12-10 11:40 |
为什么我修改了数据,比如把饼图实例的高中以下程序员人数由380改为3800,生成的图片还是用原来作者自己的数据?
不解??
请指教,谢谢  回复  
  
# re: jfreechart在jsp中的应用实例[未登录] 2007-12-16 21:17 |
老大你好,请问饼图最下面的文字如何修改呢?我找了半天不知道要如何修改,就是有颜色小圈圈旁边的那些文字如何修改呢??  回复  
  
# re: jfreechart在jsp中的应用实例 2008-01-11 16:04 |
谢谢分享!!!  回复  
  
# re: jfreechart在jsp中的应用实例[未登录] 2008-01-18 15:54 |
请问楼主如何做甘特图,下载的没有啊,如有的话给我发邮件吧,谢谢,
meiseagull@163.com  回复  
  
# re: jfreechart在jsp中的应用实例 2009-01-12 15:15 |
抛getoutputstream() has already been called for this response异常,是什么一回事呢?  回复  
  
# re: jfreechart在jsp中的应用实例 2010-04-26 16:11 |
能用鼠标点击图片 链接 到其它地方吗(如果页面等等)  回复  
  
# re: jfreechart在jsp中的应用实例[未登录] 2010-05-19 19:02 |
你这是个静态的啊?有没有动态实现的。  回复  
  
# re: jfreechart在jsp中的应用实例 2010-06-29 17:29 |
jfreechart 是一个开源的 java 项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 ) 、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业系统的要求。 jfreechart 是一种基于 java 语言的图表开发技术。 jfreechart 可用于 servlet 、 jsp 、 applet 、 java appication 环境中,通过 jdbc 可动态显示任何数据库数据,结合 itext 可以输出至 pdf 文件。

这个东西正符合我们的需求,于是对他进行了研究并试验。前些时间懒,一直没有把研究测试心得写出来,现在闲下来,整理了一下,搞两个例子放上来供大家参考吧。  回复  
  
# re: jfreechart在jsp中的应用实例 2011-06-02 16:22 |
不错  回复  
  
# re: jfreechart在jsp中的应用实例 2011-06-10 13:51 |
我怎么部署不上去啊!有web的直接给个撒!发送邮箱zhangqitan@hotmail.com  回复  
  
# re: jfreechart在jsp中的应用实例 2012-10-08 12:33 |
别在这复制粘贴东西ok? 先自己看看对不对再复制!!!没写servlet 你配置web.xml有个毛用啊?   回复  
  
# re: jfreechart在jsp中的应用实例 2014-03-10 19:51 |
非常感谢  回复  
  
# re: jfreechart在jsp中的应用实例 2014-03-13 20:52 |
我想问下,这些代码我copy下来之后,图片显示不出来,但是,鼠标划过时有数据…………  回复  
  

只有注册用户后才能发表评论。


网站导航:
              
 
网站地图