Java图表开发-JFreeChart

来源:互联网 发布:red5 flash 开发端口 编辑:程序博客网 时间:2024/04/19 17:01
 JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

组件下载地址:http://sourceforge.net/project/showfiles.php?group_id=15494/

应用基于JAVA的图表开发,基本能够解决目前的图形方面的需求, 图形可以导出成PNGJPEG格式,同时还可以与PDFEXCEL关联。免费使用,有在线文档,但开发向导文档是收费的。

安装配置 ,我下载的是最新的jfreechart-1.0.1版本,解压到指定的位置,在开发中需要的lib文件夹下的jcommon-1.0.0jfreechart-1.0.1两个jar文件。 把上述三个文件拷贝到WEB-INF/LIB中,然后修改WEB-INF/web.xml文件,在其中加入<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>

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

 JFreeChart的配置及核心类库介绍

研究jfreechart源码发现源码的主要由两个大的包组成:

org.jfree.chart, 主要与图形本身有关

org.jfree.data,与图形显示的数据有关。

核心类主要有: 

org.jfree.chart.JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象

org.jfree.data.category.XXXDataSet:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类

org.jfree.chart.plot.XXXPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要AxisRenderer以及数据集对象的支持

org.jfree.chart.axis.XXXAxis:用于处理图表的两个轴:纵轴和横轴

org.jfree.chart.render.XXXRender:负责如何显示一个图表对象

org.jfree.chart.urls.XXXURLGenerator:用于生成Web图表中每个项目的鼠标点击链接

XXXXXToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

以开发饼图为例子说明JFreeChart开发图表的过程

调用与图形本身有关的API org.jfree.chart),设置图表的标题,图片的背景颜色,图片的大小(长度和高度),还有一些其它的属性的设置。将图片保存为png 或是jpeg格式,输出图表。使用PieDatasetJDBCPieDataset调用JDBC驱动连接数据库。在jsp页面中获取URL,用img标签显示图片。

示例代码:

PieChart.java //设置饼图的属性

package org.jfree.chart.demo;

    import java.io.PrintWriter;
          import javax.servlet.http.HttpSession;
          import javax.servlet.http.HttpServletRequest;
          import org.jfree.chart.ChartRenderingInfo;
          import org.jfree.chart.ChartUtilities;
          import org.jfree.chart.JFreeChart;
          import org.jfree.chart.entity.StandardEntityCollection;
          import org.jfree.chart.plot.PiePlot;
          import org.jfree.chart.servlet.ServletUtilities;
          import org.jfree.data.general.PieDataset;

    public class PieChart {
         /**
          * @param request
          * @param session
          * @param pw
          * @return string
          */ 
      public String generatePieChart(HttpServletRequest request, HttpSession session,      PrintWriter pw) {
  String filename = null;
  try{
   ConnDb object = new ConnDb();
   PieDataset data = object.readData();
   PiePlot plot = new PiePlot(data);
 

JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
   //可选,设置图片背景色
   chart.setBackgroundPaint(java.awt.Color.white);
   //可选,设置图片标题
   chart.setTitle("efei公司地区销售统计");
   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
   //500是图片长度,300是图片高度
   filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
      ChartUtilities.writeImageMap(pw, filename, info,false);
      pw.flush();
   }catch(Exception e) {
    System.out.println("Exception - " + e.toString());
    e.printStackTrace(System.out);
    filename = "public_error_500x300.png";
   }
   return filename;
  }
}

连接数据库

ConnDb.java

package org.jfree.chart.demo;

import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;

import org.jfree.data.general.PieDataset;
      import org.jfree.data.jdbc.JDBCPieDataset;

public class ConnDb {
 public PieDataset readData() {
  JDBCPieDataset data = null;
  String url = "jdbc:oracle:thin:@host:1521:efei";
  Connection con;
  try {
  Class.forName("oracle.jdbc.OracleDriver");
  }
  catch (ClassNotFoundException e) {
  System.err.print("ClassNotFoundException: ");
  System.err.println(e.getMessage());
  }
  try {
  con = DriverManager.getConnection(url, "jefflan", "efei");
  data = new JDBCPieDataset(con);
  String sql = "SELECT description,value FROM efei";
  data.executeQuery(sql);
  con.close();
  }
  catch (SQLException e) {
  System.err.print("SQLException: ");
  System.err.println(e.getMessage());
  }
  catch (Exception e) {
  System.err.print("Exception: ");
  System.err.println(e.getMessage());
  }
  return data;
  }

}

jsp中显示图片:

pieChart.jsp

<%@ page import="org.jfree.chart.demo.PieChart"%>
<%@ page import = "java.io.PrintWriter" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<HTML>
<HEAD>
       <TITLE>pieChart</TITLE>
</HEAD>
<BODY>
<%
PieChart pie = new PieChart();
String filename = pie.generatePieChart(request,session,new PrintWriter(out));
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;%>
<P ALIGN="CENTER">
       <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
</P>
</BODY>
</HTML>

建表语句:

CREATE table EFEI(
      ID NUMBER(15) PRIMARY KEY not null,
      DESCRIPTION VARCHAR2(200),
      VALUE NUMBER(15))

运行程序显示的图表如下:

查看更多精彩图片
  
 

原创粉丝点击