java代码
package com.trswcm.jfreechar;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartRenderingInfo;
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.DefaultPieDataset;
/**
*
* <p>标题: —— 生成饼状图</p>
* <p>描述: —— 更具sql生成柱状图</p>
* <p>模块: 通用平台</p>
* <p>版权: Copyright (c) 2011 江苏集群信息产业股份有限公司
* @author 刘永
* @version 1.0
* @since 2011-3-9 上午11:41:57
* <p>修订历史:(历次修订内容、修订人、修订时间等) </p>
*/
public class PieChart {
/**
*
* <p>生成饼状图</p>
* <p>创建时间:2011-3-9上午11:43:20</p>
* <p>作者: 刘永</p>
* @param session
* @param pw
* @return String
*/
public String getPieChart(HttpSession session, PrintWriter pw){
//报表文件名称
String fileName = null;
//报表数据
DefaultPieDataset data = new JfreeCharttools().createPieDateSet();
PiePlot plot = new PiePlot(data);
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
//可选,设置图片背景色
chart.setBackgroundPaint(java.awt.Color.white);
//可选,设置图片标题
chart.setTitle("www.SenTom.net 网站访问统计表");
//500是图片长度,300是图片高度
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
try {
fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fileName;
}
}
package com.trswcm.jfreechar;
import java.awt.Color;
import java.awt.Font;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.title.TextTitle;
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.xy.XYDataset;
/**
*
* <p>标题: —— jfreechart的工具类</p>
* <p>描述: —— 简要描述类的职责、实现方式、使用注意事项等</p>
* <p>模块: 查询统计</p>
* <p>版权: Copyright (c) 2011 江苏集群信息产业股份有限公司
* @author 刘永
* @version 1.0
* @since 2011-3-9 上午10:45:39
* <p>修订历史:(历次修订内容、修订人、修订时间等) </p>
*/
public class JfreeCharttools {
/**
*
* <p>方法说明:处理JFreeChart中文乱码问题</p>
* <p>创建时间:2011-3-9上午10:46:25</p>
* <p>作者: 刘永</p>
* @param chart Jfreechart对象
*/
@SuppressWarnings("all")
public void configFont(JFreeChart chart){
// 配置字体
Font xfont = new Font("宋体",Font.PLAIN,12) ;// X轴
Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y轴
Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部
Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 图片标题
CategoryPlot plot = chart.getCategoryPlot();// 图形的绘制结构对象
// 图片标题
chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
// X 轴
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(xfont);// 轴标题
domainAxis.setTickLabelFont(xfont);// 轴数值
// Y 轴
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(yfont);
rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色
rangeAxis.setTickLabelFont(yfont);
// 字体颜色
domainAxis.setTickLabelPaint(Color.BLUE) ;
// 横轴上的label斜显示
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
}
/**
*
* <p>获取柱状图数据对象</p>
* <p>创建时间:2011-3-9上午11:26:57</p>
* <p>作者: 刘永</p>
* @return DefaultCategoryDataset 柱状图数据对象
*/
@SuppressWarnings("all")
public DefaultCategoryDataset createBarDateSet()
{
double[] data = {85, 156, 179.5, 211, 123};
String[] labels = {"星期一", "星期二", "星期三", "星期四", "星期五"};
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < data.length; i++) {
dataset.addValue(data[i], labels[i], labels[i]);
}
return dataset;
}
/**
*
* <p>获取趋势图数据对象</p>
* <p>创建时间:2011-3-9上午11:27:50</p>
* <p>作者: 刘永</p>
* @return XYDataset 趋势图数据对象
*/
@SuppressWarnings("all")
public XYDataset createXYDateSet()
{
TimeSeriesCollection dataset = new TimeSeriesCollection();//时间曲线数据集合
TimeSeries s1 = new TimeSeries("难难难", Day.class);;
//创建时间数据源,每一个//TimeSeries在图上是一条曲线
s1.add(new Day(1, 2, 2006), 123.51);
s1.add(new Day(2, 2, 2006), 122.1);
s1.add(new Day(3, 2, 2006), 120.86);
s1.add(new Day(4, 2, 2006), 122.50);
s1.add(new Day(5, 2, 2006), 123.12);
s1.add(new Day(6, 2, 2006), 123.9);
s1.add(new Day(7, 2, 2006), 124.47);
s1.add(new Day(8, 2, 2006), 124.08);
s1.add(new Day(9, 2, 2006), 123.55);
s1.add(new Day(10, 2, 2006), 122.53);
dataset.addSeries(s1);
dataset.setDomainIsPointsInTime(true);
return dataset;
}
/**
*
* <p>获取饼状图数据对象</p>
* <p>创建时间:2011-3-9上午11:29:12</p>
* <p>作者: 刘永</p>
* @return DefaultPieDataset 饼状图数据对象
*/
@SuppressWarnings("all")
public DefaultPieDataset createPieDateSet()
{
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("六月",500);
data.setValue("七月",580);
data.setValue("八月",828);
return data;
}
}
jsp代码
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.trswcm.jfreechar.PieChart"%>
<%@ page import = "java.io.PrintWriter" %>
<%
PieChart barChart=new PieChart();
String fileName=barChart.getPieChart(session,new PrintWriter(out));
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
%>
<html>
</head>
<title> JFreeChart使用例子</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= fileName %>">
</body>
</html>