随笔 - 251  文章 - 504  trackbacks - 0
<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

本博客系个人收集材料及学习记录之用,各类“大侠”勿扰!

留言簿(14)

随笔分类

收藏夹

My Favorite Web Sites

名Bloger

非著名Bloger

搜索

  •  

积分与排名

  • 积分 - 197499
  • 排名 - 289

最新评论

由于项目需求原因,上网看了些JfreeChart的例子。自己就试着用了下:
BarCharDemo.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.general.DefaultPieDataset"%>
<%@page import="org.jfree.data.general.PieDataset"%>
<%
DefaultPieDataset  dataset    = new DefaultPieDataset ();
  dataset.setValue("苹果",100); 
  dataset.setValue("梨",200);
  dataset.setValue("香蕉",300);
  dataset.setValue("芒果",400);
  dataset.setValue("葡萄",500);


   JFreeChart chart      = ChartFactory.createPieChart3D(
    "水果产量图",       //图标标题
    dataset,       //数据集
    true,        //是否显示图例(简单的柱装图必须是fasle)
    false,        //是否生成工具
    false        //是否生成URL链接
    );

   
    ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,640,370);
%>

PieChartDemo.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"%>
<%
DefaultCategoryDataset dataset    = new DefaultCategoryDataset();
 dataset.addValue(100, "北京", "苹果");
  dataset.addValue(130, "上海", "苹果");
  dataset.addValue(160, "广州", "苹果");
  dataset.addValue(200, "北京", "梨子");
  dataset.addValue(230, "上海", "梨子");
  dataset.addValue(260, "广州", "梨子");
  dataset.addValue(300, "北京", "葡萄");
  dataset.addValue(330, "上海", "葡萄");
  dataset.addValue(360, "广州", "葡萄");
  dataset.addValue(400, "北京", "香蕉");
  dataset.addValue(430, "上海", "香蕉");
  dataset.addValue(460, "广州", "香蕉");
  dataset.addValue(500, "北京", "荔枝");
  dataset.addValue(530, "上海", "荔枝");
  dataset.addValue(560, "广州", "荔枝");
 
    JFreeChart chart      = ChartFactory.createBarChart3D(
    "水果产量图",       //图标标题
    "水果",        //目录轴显示标签 (x轴)
    "产量",        //数据轴显示标签 (y轴)
    dataset,       //数据集
    PlotOrientation.VERTICAL,   //图标方向:水平,垂直
    true,        //是否显示图例(简单的柱装图必须是fasle)
    false,        //是否生成工具
    false        //是否生成URL链接
    );
   
    ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,640,370);
%>

TimeSeriesDemo(在页面上显示)
首先配置web.xml
 <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>


TimeSeriesDemo.java

package net.neitbe.home.jfreechart.business;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeriesDataItem;

/**
 * @author neitbe
 */
public class TimeSeriesDemo {

 private static Log log    = LogFactory.getLog(TimeSeriesDemo.class);
 
 //曲线图标题
 private String title    = "趋势分析";
 //曲线图X轴提示
 private String domain    = "月份走势";
 //曲线图Y轴提示
 private String range    = "应收余额";
 //曲线图自标题
 private String subtitleStr   = "2005财年分析";
 
 //创建时间数据源
 //每一个TimeSeries在图上是一条曲线
 private TimeSeries yongyou    = new TimeSeries("用友");
 private TimeSeries jindie    = new TimeSeries("金碟");
 private TimeSeries dongruan    = new TimeSeries("东软");
 
 //时间曲线数据集合
 private static TimeSeriesCollection dataset = new TimeSeriesCollection();


 private void setDataset() {
  dataset.removeAllSeries();        //在javaBean中使用此类这个很重要,不然会不停的加入新的TimeSeries;
  dataset.addSeries(this.yongyou);
  dataset.addSeries(this.jindie);
  dataset.addSeries(this.dongruan);
  
 }

 private void setDongruan() {
  this.dongruan.clear();     //很重要,不然会报错
  /**
   * 报错
   * org.apache.jasper.JasperException: You are attempting to add an observation for the time period
   * 这里是在类属性里声明TimeSeries才用到的
   */
  for(int i = 1999; i < 2005; i++) {
   for(int mon = 0; mon < 12; mon++) {
    
    this.dongruan.add(new TimeSeriesDataItem(new Day(1,mon+1,i),new Double(300 - Math.random()*100)));
   }
  }
 }

 private void setJindie() {
  
  this.jindie.clear();    //很重要,不然会报错
  for(int i = 1999; i < 2005; i++) {
   for(int mon = 0; mon < 12; mon++) {
    this.jindie.add(new TimeSeriesDataItem(new Day(1,mon+1,i),new Double(400 - Math.random()*100)));
   }
  }
 }

 

 private void setYongyou() {
  this.yongyou.clear();   //很重要,不然会报错
  for(int i = 1999; i < 2005; i++) {
   for(int mon = 0; mon < 12; mon++) {
    this.yongyou.add(new TimeSeriesDataItem(new Day(1,mon+1,i),new Double(500 - Math.random()*100)));
   }
  }
  
 }

 private TimeSeriesCollection getDataset() {
  this.setDongruan();
  this.setJindie();
  this.setYongyou();
  this.setDataset();
  return dataset;
 }
 
 public String drawPic(HttpSession session) {
  String fileName       = null;
  JFreeChart chart      = ChartFactory.createTimeSeriesChart(title,domain,range,getDataset(),true,true,false);
  TextTitle subTitle      = new TextTitle(subtitleStr,new Font("黑体",Font.BOLD,12));
  chart.addSubtitle(subTitle);
  chart.setTitle(new TextTitle(title,new Font("隶书",Font.ITALIC,15)));
  chart.setBorderPaint(new GradientPaint(0,0,Color.white,0,1000,Color.blue));
  //String fileName       = "D:\\fuit2.jpeg";
  try {
   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());


   log.debug("准备创建图片……");
   fileName       = ServletUtilities.saveChartAsJPEG(chart,600,600,info,session);
   log.debug("图片创建成功!");
  } catch (IOException e) {
   log.error("IO异常:",e);
  }
  log.debug("返回的文件名为:" + fileName);
  return fileName;
 }
 
 /*public static void main(String[] args) {
  TimeSeriesDemo timeSeriesDemo   = new TimeSeriesDemo();
  timeSeriesDemo.drawPic();
 }*/


 
}


index.jsp页面:
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
<jsp:useBean id="timeSeries" scope="session" class="net.neitbe.home.jfreechart.business.TimeSeriesDemo"/>
</head>
<body>
<%
 String fileName   = timeSeries.drawPic(request.getSession());
 String graphURL   = request.getContextPath()+"/servlet/DisplayChart?filename=" + fileName;
%>
<%=graphURL%><br/>
<img src="<%= graphURL %>" width="400" height="400" border="1"/>
</body>
</html>

posted on 2006-07-07 15:26 matthew 阅读(1416) 评论(4)  编辑  收藏 所属分类: 报表设计与开发

FeedBack:
# re: JFreeChart 初学 2006-07-07 22:00 hhriver
请教一个问题
series.add(date,value)
data它是特殊类型,我如果想用数据库里面提出来的string做时间轴的话,该怎样解决呢?
谢谢  回复  更多评论
  
# re: JFreeChart 初学 2006-12-19 17:12 rain
什么破程序,运行不了  回复  更多评论
  
# re: JFreeChart 初学 2006-12-20 09:38 matthew2006
能告诉我你是怎么运行的?报什么错?  回复  更多评论
  
# re: JFreeChart 初学 2006-12-21 09:02 XX
@hhriver
把好像DATASET这个对象有个addvalue,把你的时间循环出来在用addvalue这个方法  回复  更多评论
  

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


网站导航: