在工作中,我们常常碰到需要在网页上绘制统计图的例子。其实实现的办法有很多,我们可以亲自编写全部图形生成代码,比如用flash,或者用svg,这样做代码量很大,还容易出错,很烦的。也可以利用现成的java统计图表库。例如用jclass(http://java.quest.com/jclass/jclass.shtml),可是这玩艺却是要收费的。对于我们这种崇尚open source的程序员来说,有没有一个开源的统计图形库呢。有,它就是www.jfree.org推出的jfreechart包,它从柱形图,饼形图,到雷达图,蜡烛图等等无所不包,可以在c/s,b/s,甚至是实时环境都能一显身手。最关键的是它是open source!我在这里给出一个在网页上绘制饼形图的简单例子。
1、到www.jfree.org下载一个最新的java库,置jfreechart.jar和jcommon.jar.jar于classpath中
2、编写一个java bean,用来生成饼形图。(gspiechart.java)
| package gov.gwssi.tax.nspg.datadisposal; import java.awt.insets; import java.awt.image; import java.io.printwriter; import java.text.simpledateformat; import java.util.date; import java.util.arraylist; import java.util.iterator; import java.util.locale; import java.text.numberformat; import javax.servlet.http.httpsession; import org.jfree.data.*; import org.jfree.chart.*; import org.jfree.chart.axis.*; import org.jfree.chart.renderer.verticalbarrenderer; import org.jfree.chart.renderer.standardxyitemrenderer; import org.jfree.chart.plot.*; import org.jfree.chart.entity.*; import org.jfree.chart.tooltips.*; import org.jfree.chart.urls.*; import org.jfree.chart.servlet.*; import java.awt.font; /** * <p>title: </p> * <p>description: </p> * <p>copyright: copyright (c) 2003</p> * <p>company: </p> * @author jagie * @version 1.0 */ public class gspiechart { public static void main(string[] args) { long[] testdata = { new long(10), new long(20), new long(30), new long(40) } ; generatepiechart(testdata, "", null, new printwriter(system.out), 580, 250); } /** * 生成图像文件 * @param datas long[]数组 * @param targeturl 点饼形图上的扇形,定向到的url * @param session httpsession * @param pw printwriter * @param w 生成的图的宽度 * @param h 生成的图的高度 * @return 生成的图像文件的路径 */ public static string generatepiechart (long[] datas, string targeturl, httpsession session, printwriter pw, int w, int h) { string filename = null; try { defaultpiedataset data = new defaultpiedataset(); data.setvalue("正常纳税人", datas[0]); data.setvalue("异常纳税人", datas[1]); data.setvalue("数据不全纳税人", datas[2]); data.setvalue("未处理纳税人", datas[3]); // create the chart object pie3dplot plot = new pie3dplot(data); plot.setinsets(new insets(0, 5, 5, 5)); plot.setforegroundalpha(0.6f); plot.setsectionlabeltype(plot.no_labels); plot.seturlgenerator(new standardpieurlgenerator(targeturl, "type")); plot.settooltipgenerator(new standardpietooltipgenerator()); jfreechart chart = new jfreechart("数据处理结果统计图", jfreechart.default_title_font, plot, true); chart.settitle(new texttitle("数据处理结果统计图", new font("黑体", font.bold, 15))); standardlegend sl = (standardlegend) chart.getlegend(); sl.setitemfont(new font("黑体", font.truetype_font, 12)); chart.setbackgroundpaint(new java.awt.color(254, 254, 141)); // 因为jfreechart把生成的png文件保存在系统的临时文件夹中,你需要在适当的 //时候调用session.removeattribute("jfreechart_deleter"),这样可以保证png文 //件被删除掉 chartrenderinginfo info = new chartrenderinginfo(new standardentitycollection()); filename = servletutilities.savechartaspng(chart, w, h, info, session); // write the image map to the printwriter chartutilities.writeimagemap(pw, filename, info); pw.flush(); } catch (exception e) { system.out.println("exception - " + e.tostring()); e.printstacktrace(system.out); filename = "public_error_500x300.png"; } return filename; } } |
| <% //以下部分为图象输出 string argeturl="../servlet/gov.gwssi.tax.nspg.controlservlet.gsmaincontrolservlet?id="+sid;long[] datas={normals,new long(totalabnormal),datalacks,notprocesses}; string filename=gspiechart.generatepiechart(datas,targeturl,session,new printwriter(out),580,250); string graphurl = request.getcontextpath() + "/servlet/displaychart?filename=" + filename; %> |
| <!-- pie chart --> <table width="580" border="0" cellspacing="0" cellpadding="0"> <tr> <td> <img src="<%= graphurl %>" width=580 height=250 border=0 usemap="#<%=filename %>"> </td> </tr> </table> |
| <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> |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器