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