jfeechart的一个例子

jsp页面中主要用iframe来推出图表显示,采用的是servlet的方法:

  <tr>
  <td align="center" class="code">

    <iframe height="700" id="info" name=info width="708" scrolling="auto" frameborder=0
           src="<%=pathPrefix%>/freeChartServlet?chart_title=<bean:write name="statImageForm" property="chartConditionSetting.chart_title"/>
                                                &chart_type=<bean:write name="statImageForm" property="chartConditionSetting.chart_type"/>
                                                &in=<bean:write name="statImageForm" property="chartConditionSetting.in"/>
                                                &cityid=<bean:write name="statImageForm" property="chartConditionSetting.cityid"/>
                                                &prodid=<bean:write name="statImageForm" property="chartConditionSetting.prodid"/>
                                                &start_date=<bean:write name="statImageForm" property="chartConditionSetting.start_date"/>
                                                &end_date=<bean:write name="statImageForm" property="chartConditionSetting.end_date"/>
           " align="center">
    </iframe>

       </td>   
</tr>

类的实现

/**
 * <p>Title FreeChartServlet.java</p>
 * <p>Description FreeChartServlet.java</p>
 * <p>Copyright: Copyright (c) 2006-11-16</p>
 * <p>Company: ericsson</p>
 * @author huangming
 * @version 1.0
 */
package com.ericsson.esmp.jfreechart;

import java.awt.Color;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Calendar;
import java.util.Locale;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardLegend;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.BarRenderer3D;
import org.jfree.chart.renderer.LineAndShapeRenderer;
import org.jfree.data.CategoryDataset;
import org.jfree.data.PieDataset;
import com.ericsson.esmp.statimage.StatMgr;

import cn.jado.lib.ConvertString;


public class FreeChartServlet extends HttpServlet{

    public static final String CONTENT_TYPE = "image/jpeg";
   
    public static final int BAR_CHART= 1; //饼状图

    public static final int BAR_CHART_HORIZONTAL = 2; //柱状图
   
    public static final int XY_CHART = 3; //曲线图
   
   

//Initialize global variables
    public void init() throws ServletException {  
    }

//Clean up resources
    public void destroy() {
    }

   public void service(ServletRequest req, ServletResponse res) throws
           ServletException, IOException {

        res.setContentType(CONTENT_TYPE);

  HttpServletRequest request  = (HttpServletRequest)req;
  String chart_type = null;
  String chart_title = null;
  String chart_character = null;
  String months=null;
  String cityid=null;
  String in=null;
  String prodid=null; 
  String monthType = null;
  
  String begin=null;
  
  String end = null;
  //纵轴标签名称
  String vertical_label_name = null;
  //横轴标签名称
  String horizontal_label_name = "统计月份";

  String curYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
  String curMonth = String.valueOf(Calendar.getInstance().get(Calendar.MONTH) + 1);
  String curDay = String.valueOf(Calendar.getInstance().get(Calendar.DATE));
  String curDate =curYear+"-"+curMonth+"-"+curDay;
  
 if (req.getParameter("chart_type") != null && req.getParameter(
     "chart_type").length() > 0) {//图表类型
   chart_type = ConvertString.convertToISO8859_1(req.getParameter("chart_type").trim());
   }
 System.out.println("chart_type=" + chart_type);
 
 if (req.getParameter("chart_title") != null && req.getParameter(
     "chart_title").length() > 0) {//图表标题
   chart_title = ConvertString.convertToISO8859_1(req.getParameter("chart_title").trim());
 }
 System.out.println("chart_title=" + chart_title);
 
 if (req.getParameter("chart_character") != null && req.getParameter(
    "chart_character").length() > 0) {//图表性质
      chart_character = ConvertString.convertToISO8859_1(req.getParameter(
      "chart_character").trim());
    }
     System.out.println("chart_character=" + chart_character);
 
 if (req.getParameter("in") != null && req.getParameter("in").length() > 0) {//统计类型
     in = ConvertString.convertToISO8859_1(req.getParameter("in").trim());
    }
    System.out.println("in=" +in);
 
 if (req.getParameter("cityid") != null && req.getParameter("cityid").length() > 0)
 {//城市
  cityid = ConvertString.convertToISO8859_1(req.getParameter("cityid").trim());
     }
 System.out.println("cityid="+cityid);
 
 if (req.getParameter("prodid") != null && req.getParameter("prodid").length() > 0)
 {//产品
  prodid = ConvertString.convertToISO8859_1(req.getParameter("prodid").trim());
     }
 System.out.println("prodid="+prodid);
 
 if (req.getParameter("months") != null && req.getParameter(
           "months").length() > 0) {
   months = ConvertString.convertToISO8859_1(req.getParameter(
       "months").trim());
 }
 System.out.println("months=" + months);
 
 //begin
 if (req.getParameter("begin") != null && req.getParameter("begin").length() > 0) {
  begin = ConvertString.convertToISO8859_1(req.getParameter("begin").trim());
 }
 System.out.println("begin=" + begin);
 
 //end
 if (req.getParameter("end") != null && req.getParameter("end").length() > 0) {
  end = ConvertString.convertToISO8859_1(req.getParameter("end").trim());
     }
     System.out.println("end=" + end);
    
    
   //monthType
 if (req.getParameter("monthType") != null && req.getParameter("monthType").length() > 0) {
  monthType = ConvertString.convertToISO8859_1(req.getParameter("monthType").trim());
    }
    System.out.println("monthType=" + monthType);

 //获取数据值 
 CategoryDataset dataset = getDataSet(monthType,chart_character,in,cityid,begin,end); //订户发展统计
 
 PieDataset  pdataset=getDataSet1(months,chart_character,cityid,begin,end); //订户比例统计
  
 JFreeChart chart = null;
  
    NumberFormat nf = NumberFormat.getInstance(Locale.CHINA);
    DecimalFormat df = (DecimalFormat) nf;
    df.applyPattern("0.00");
    DecimalFormat df2 = (DecimalFormat) nf;
    df2.applyPattern("0.00%");

    if(chart_title!=null&&chart_title.equals("percent"))
    {
        chart_title="订户统计比例图";
    }
   
    if(chart_title!=null&&chart_title.equals("1"))
    {
        chart_title="订户发展统计图";
    }
    if(chart_title!=null&&chart_title.equals("out"))
    {
        chart_title="订户注销情况统计图";
    }
   
 switch (Integer.parseInt(chart_type)) {
 
   case BAR_CHART: //1 
    
     chart = ChartFactory.createPieChart3D(
         chart_title, // 图表标题
         pdataset, // 数据集
         true, // 是否显示图例(对于简单的柱状图必须是false)
         true, // 是否生成工具
         false // 是否生成URL链接
         );
     PiePlot3D plot = (PiePlot3D) chart.getPlot();
     plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {2}",
       df,df));
     plot.setNoDataMessage("没有数据");
     plot.setIgnoreNullValues(false);
     break;
     
   case XY_CHART: //3 曲线
    chart   =   ChartFactory.createLineChart(  
      chart_title,                                    //   chart   title  
                  null,                                          //   domain   axis   label  
                  "数量",                                        //   range   axis   label  
                  dataset,                                     //   data  
                  PlotOrientation.VERTICAL,                   //   orientation  
                  true,                                      //   include   legend  
                  true,                                     //   tooltips  
                  false                                    //   urls  
          ); 
    final   StandardLegend   legend   =   (StandardLegend)   chart.getLegend();  
          legend.setDisplaySeriesShapes(true);  
          legend.setShapeScaleX(1.5);  
          legend.setShapeScaleY(1.5);   
          legend.setDisplaySeriesLines(true);  

          chart.setBackgroundPaint(Color.lightGray);  
          CategoryPlot   plot3   =   (CategoryPlot)   chart.getPlot();  
          plot3.setBackgroundPaint(Color.white);  
          plot3.setRangeGridlinePaint(Color.black);  

          final   NumberAxis   rangeAxis   =   (NumberAxis)   plot3.getRangeAxis();  
          rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  
          rangeAxis.setAutoRangeIncludesZero(true);  
          final   LineAndShapeRenderer   renderer   =   (LineAndShapeRenderer)   plot3.getRenderer();  
          renderer.setDrawShapes(true);  
          renderer.setShapesFilled(true);  
          renderer.setPositiveItemLabelPosition(new   ItemLabelPosition());  
          renderer.setNegativeItemLabelPosition(new   ItemLabelPosition()); 
     break;
     
   default :
     chart = ChartFactory.createBarChart3D(
          chart_title, // 图表标题
          horizontal_label_name, // 目录轴的显示标签
          vertical_label_name, // 数值轴的显示标签
          dataset, // 数据集
          PlotOrientation.VERTICAL, // 图表方向:水平、垂直
          true, // 是否显示图例(对于简单的柱状图必须是false)
          false, // 是否生成工具
          false // 是否生成URL链接
          );

    CategoryPlot plot1=chart.getCategoryPlot();
    BarRenderer3D renderer1 = new BarRenderer3D();
//    设置每个地区所包含的平行柱的之间距离
    renderer1.setItemMargin(0.1);
//    显示每个柱的数值,并修改该数值的字体属性
    renderer1.setMaxBarWidth(0.05);//double
    renderer1.setBaseLabelGenerator(new StandardCategoryItemLabelGenerator());
    renderer1.setItemLabelsVisible(true);
    plot1.setRenderer(renderer1);
    plot1.setNoDataMessage("没有数据");
    final NumberAxis rangeAxis1 = (NumberAxis) plot1.getRangeAxis();
    rangeAxis1.setStandardTickUnits(NumberAxis.createIntegerTickUnits());    
      break; 
 }

 ChartUtilities.writeChartAsJPEG(res.getOutputStream(),50, chart, 650, 400, null);
 
 }
 
 /**
 * 获取组合数据集对象
 * @param start_date:开始时间
 * @param end_date:结束时间
 * @param vertical_label:纵轴标签
 * @param horizontal_label:横轴标签
 * @param chart_character:图表性质
 * @return  CategoryDataset :组合数据集对象
 */
  
 private static CategoryDataset getDataSet(String monthType,String chart_character,String in,String cityid,String begin,String end)
 { 
  CategoryDataset dataset=null;
  StatMgr statmgr=new StatMgr();
  dataset=statmgr.getDataSet(monthType,chart_character,in,cityid,begin,end);
  return dataset;
 }   
 private static PieDataset  getDataSet1(String months,String chart_title,String cityid,String begin,String end)
 { 
  PieDataset data=null;
  StatMgr statmgr=new StatMgr();
  data=statmgr.getPieDataSet(months,chart_title,cityid,begin,end);
  return data;
 }
 
 }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值