选择显示字体大小

用jfreechart来生成统计图表


  在工作中,我们常常碰到需要在网页上绘制统计图的例子。其实实现的办法有很多,我们可以亲自编写全部图形生成代码,比如用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;
 }
}


  3、在一个jsp文件中使用这个javabean来生成图像,以下是代码片断

.........java代码.................

<%
 //以下部分为图象输出

 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;
%>

.......html代码................

<!-- 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>

  4、在web.xml中配置jfreechart的图像生成的servlet

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>

  以上就是在b/s中使用jfreechart的大体步骤,在你下载的jfreechart的sample文件夹中找到jfreechart-sample.war文件中也有类似的例子,只不过复杂一些。

  最后,希望这篇文章能对你有所启发。如有错误之处,欢迎批评指正。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons