统计图JFreeChart

ReportJFreeChar.java:

package crm.action;

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeriesDataItem;
import org.jfree.util.Log;

public class ReportJFreeChar{
 int[] rateArrays = {100,200,300,400,500};
 String[] areaArrays = {"北京","广东","河南"};
 String[] fruitArrays = {"苹果","栗子","香蕉","葡萄","柿子"};
 
 /**
  * 生成柱状图
  */
 public void buildBarChar(ServletResponse response) {
  CategoryDataset dataset = barDataSet();
  JFreeChart jFreeChart = ChartFactory.createBarChart3D(
    "水果产量图",//图标标题
    "水果",//目录轴的显示标签
    "产量", //数值轴的显示标签
    dataset,//数据集
    PlotOrientation.VERTICAL,//图标方向:水平、垂直
    true,//是否显示图例(对于简单的柱状图必须是false)
    false,//是否生成工具
    false//是否生成URL链接
    );
  try {
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), jFreeChart,1000, 500);
  } catch (IOException e) {
   Log.warn(e.toString());
  }
 }
 
 /**
  * 简单的数据集对象,生成简单的柱状图
  * @param dataset
  * @return CategoryDataset
  */
 private CategoryDataset simpleBarDataSet()
 {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  for(int i = 0;i<rateArrays.length;i++)
  {
   dataset.addValue(rateArrays[i], "", fruitArrays[i]);
  }
  return dataset;
 }
 
 /**
  * 组合数据集对象,生成柱状图
  * @param dataset
  * @return CategoryDataset
  */
 private CategoryDataset barDataSet()
 {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  for(int i = 0;i<rateArrays.length;i++)
  {
   for(int j= 0 ; j<areaArrays.length;j++)
   {
    dataset.addValue(rateArrays[i]+Math.random()*200, areaArrays[j], fruitArrays[i]);
   }
  }
  return dataset;
 }
 
 /**
  * 生成饼状图
  */
 public void buildBingChar(ServletResponse response) {
  DefaultPieDataset pieDataset = bingDataSet();
  JFreeChart jFreeChart = ChartFactory.createPieChart3D(
    "水果产量图",//图标标题
    pieDataset,//数据集
    true,//是否显示图例
    false,
    false
    );
  try {
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), jFreeChart,1000, 500);
  } catch (IOException e) {
   Log.warn(e.toString());
  }
 }
 
 /**
  * 饼状图的数据对象
  * @param dataset
  * @return CategoryDataset
  */
 private DefaultPieDataset bingDataSet()
 {
  DefaultPieDataset pieDataset = new DefaultPieDataset();
  for(int i = 0;i<rateArrays.length;i++)
  {
   //第一个参数表示值,第二个表示在饼中的大小
   pieDataset.setValue(fruitArrays[i],rateArrays[i]);
  }
  return pieDataset;
 }
 
 /**
  * 生成曲线图
  * @param response
  */
 public void bulidLineChar(ServletResponse response)
 {
  String title = "趋势分析";
  String xTitle = "年份走势";
  String yTitle = "降雨量(毫米)";
  
  TimeSeries pinguo = oneLineData("北京",100);
  TimeSeries huawei = oneLineData("广东",50);
  TimeSeries zhongruan = oneLineData("河南",20);
  
  TimeSeriesCollection dataset = new TimeSeriesCollection();
  dataset.addSeries(pinguo);
  dataset.addSeries(huawei);
  dataset.addSeries(zhongruan);
  
  JFreeChart jFreeChart = ChartFactory.createTimeSeriesChart(title,
    xTitle, yTitle, dataset, true, true, false);
  try {
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), jFreeChart,1000, 500);
  } catch (IOException e) {
   Log.warn(e.toString());
  }
 }
 
 /**
  * 曲线图中其中一条线的数据对象
  * @param company
  * @param balance
  * @return TimeSeries
  */
 private TimeSeries oneLineData(String str,int sizeAvg)
 {
  TimeSeries timeSeries = new TimeSeries(str);
  for(int i = 1990;i<2012;i++)
  {
   //new Day(1,1,i)三个参数分表表示日月年
   timeSeries.add(new TimeSeriesDataItem(new Day(1,1,i), new Double(sizeAvg+Math.random()*20)));
  }
  return timeSeries;
 }
 
 /**
  * 生成-本地图片
  */
 public void buildBingCharImg() {
  DefaultPieDataset pieDataset = bingDataSet();
  JFreeChart jFreeChart = ChartFactory.createPieChart3D(
    "水果产量图",//图标标题
    pieDataset,//数据集
    true,//是否显示图例
    false,
    false
    );
  //设置标题字体
  jFreeChart.setTitle(new TextTitle("水果产量图",new Font("黑体",Font.BOLD,20)));
  //设置小标题字体
  TextTitle subTitle = new TextTitle("小标题",new Font("黑体",Font.BOLD,12));
  jFreeChart.addSubtitle(subTitle);
  //设置背景颜色
  jFreeChart.setBackgroundPaint(Color.orange);
  //jFreeChart.setBackgroundPaint(new GradientPaint(0, 0, Color.orange,1000,100,Color.green));
  try {
   FileOutputStream fos = new FileOutputStream(new File("E:\\"+(int)(Math.random()*1000)+".jpg"));
   ChartUtilities.writeChartAsJPEG(fos, jFreeChart,1000, 500);
  } catch (IOException e) {
   Log.warn(e.toString());
  }
 }
}

ReportService.java:

package crm.service;

import java.util.Map;
import com.opensymphony.xwork2.ActionContext;

public class ReportService
{
 public void reportChart(String chart)
 {
  ActionContext context = ActionContext.getContext();
  Map request = (Map) context.get("request");
  request.put("chart", chart);
 }
}

ReportAction.java:

package crm.action;

import com.opensymphony.xwork2.ActionSupport;
import crm.service.ReportService;

public class ReportAction extends ActionSupport {
 private ReportService reportService;
 
 public ReportService getReportService() {
  return reportService;
 }
 public void setReportService(ReportService reportService) {
  this.reportService = reportService;
 }
 public String bingChart()
 {
  reportService.reportChart("bing");
  return SUCCESS;
 }
 public String zhuChart()
 {
  reportService.reportChart("zhu");
  return SUCCESS;
 }
 public String lineChart()
 {
  reportService.reportChart("line");
  return SUCCESS;
 } 
}

applicationContext.xml:

<bean id="reportService" class="crm.service.ReportService"/>                                  
 <bean id="ReportAction" class="crm.action.ReportAction" scope="prototype">
  <property name="reportService">
   <ref bean="reportService"/>
  </property>
 </bean>

struts.xml:

<action name="bingChart" class="ReportAction"
      method="bingChart">
      <result>/pages/statistical/report.jsp</result>
  </action>
  <action name="zhuChart" class="ReportAction"
      method="zhuChart">
      <result>/pages/statistical/report.jsp</result>
  </action>
  <action name="lineChart" class="ReportAction"
      method="lineChart">
      <result>/pages/statistical/report.jsp</result>
  </action>

report.jsp:

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.*" %>
<%@ page import="crm.action.ReportJFreeChar" %>
<%
    ReportJFreeChar barCharDemo = new ReportJFreeChar(); 
 String resMes = (String)request.getAttribute("chart");
 if(resMes.equals("bing"))
 {
  barCharDemo.buildBingChar(response);
 }else if(resMes.equals("zhu"))
 {
  barCharDemo.buildBarChar(response);
 }else if(resMes.equals("line"))
 {
  barCharDemo.bulidLineChar(response);
 }
 out.clear();
 out = pageContext.pushBody();
%> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值