jFreeChart 三种图片的展示

jFreeChart 三种图片的显示
创建三种图片的工厂类
import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.PieDataset;

/**
* @author:创建者 tanghairong
* @date:2011-4-7
*/
public class JFreeChartFactory {

/**
* 创建曲线图
*
* @param defaultCategoryDataset
* @return
*/
public static JFreeChart createLineChart(
DefaultCategoryDataset defaultCategoryDataset) {
JFreeChart chart = null;
chart = ChartFactory.createLineChart("点击量统计", null, null,
defaultCategoryDataset, PlotOrientation.VERTICAL, true, true,
false);
return chart;
}

/**
* 创建饼状图
*
* @param pieDataset
* @return
*/
public static JFreeChart createPieChart(PieDataset pieDataset) {

JFreeChart pieChart = ChartFactory.createPieChart3D("点击量统计",pieDataset, true, true, false);

PiePlot3D piePlot = (PiePlot3D) pieChart.getPlot();
piePlot.setBackgroundPaint(Color.WHITE);
piePlot.setLabelFont(new Font("黑体", Font.BOLD, 15));
String unitStyle = "{0}={1}({2})";
piePlot.setNoDataMessage("没有对应的数据,请重新查询");
piePlot.setNoDataMessageFont(new Font("华文行楷", Font.BOLD, 21));

// 设置图例显示样式
piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
unitStyle, NumberFormat.getNumberInstance(), new DecimalFormat(
"0.00%")));

// 设置引用标签显示样式
piePlot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
unitStyle, NumberFormat.getNumberInstance(), new DecimalFormat(
"0.00%")));

pieChart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15)); // 设置引用标签字体

pieChart.getTitle().setFont(new Font("华文行楷", Font.BOLD, 32));

return pieChart;

}

/**
* 创建条形图
* @param categoryDataset 显示数据
* @param info 数据名称
* @return
*/
public static JFreeChart createBarChart(CategoryDataset categoryDataset,String info)
{

JFreeChart chart = ChartFactory.createBarChart3D("hello", info, "广告点击率",
categoryDataset, PlotOrientation.VERTICAL, true, false, false);

chart.setTitle(new TextTitle("job36广告点击量统计", new Font("宋体", Font.BOLD
+ Font.ITALIC, 20)));

CategoryPlot plot = (CategoryPlot) chart.getPlot();

CategoryAxis categoryAxis = plot.getDomainAxis();
categoryAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));

NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
return chart;

}

/**
* 将图片写入到输出流
* @param chart 统计图
* @param width 宽度
* @param height 高度
* @param req
* @param res
* @return
*/
public static String createUseMap(JFreeChart chart, int width, int height, HttpServletRequest req, HttpServletResponse res){
//在矩形框中显示信息
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
//该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。
ChartRenderingInfo info = new ChartRenderingInfo(coll);
PrintWriter pw;
String filename = null;
try {
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("utf-8");
pw = res.getWriter();//输出MAP信息
//写入到输出流生成图像文件,同时把图片的具体信息放入ChartRenderingInfo的一个实例为以后生成Map提供信息
//ChartUtilities.writeChartAsPNG(out, chart, width, height, info);
filename = ServletUtilities.saveChartAsPNG(chart, width , height, info, req.getSession());//保存图表为文件
//读取info对象,生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush();

} catch (IOException e) {
e.printStackTrace();
}
return filename;
}


}

 

Action调用:

写道
/**
* 将数据转换为图片数据
* @param listRecordVO
* @return
*/
private String getImageData(RecordDTO recordDTO,String info) {
HttpServletRequest req = getRequest();
HttpServletResponse res = getResponse();
DefaultCategoryDataset dataset = null;
String bar_filename= null;
if (null != recordDTO) {
List<RecordVO> listRecordVO = recordDTO.getListRecordVO();
if (null != listRecordVO && listRecordVO.size() > 0) {
dataset = new DefaultCategoryDataset();
for (RecordVO recordVO : listRecordVO) {
dataset.setValue(recordVO.getClickCount(), recordVO.getDataName(),recordVO.getDataName());
}
bar_filename= JFreeChartFactory.createUseMap(JFreeChartFactory.createBarChart(dataset,info), 900, 520, req, res);
}
bar_filename= "fail";
}
return bar_filename;

}
 

配置文件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>/servletDisplayChart</url-pattern>
	</servlet-mapping>
 

 

在项目中用到的,所以直接就贴出来了,仅供自己以后参考.