闲话不多说,直接奔主题吧!1. 下载jfreechart,我用的是1.0.13版本,解压后将jfreechart-1.0.13.jar、jcommon-1.0.16.jar两个jar包加入项目的classpath,这里有个小问题,就是如果项目用使用了spring,gnujaxp.jar这个包会带来冲突,所以不需要将它也加入项目中。
2.配置。在web.xml中加上如下一段就可以了:
<!-- jfreechart配置 --> <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>/chartServlet/DisplayChart</url-pattern> </servlet-mapping>
3.在backingbean中创建画图方法drawChart(HttpSession session)
/**
* 画趋势图
*
* @param session
* @return
* @author 成溪先生
* @throws Exception
* @createTime 2010-1-4
*/
public String drawChart(HttpSession session) throws Exception{
//fileName用于记录生成的图片保存的路径
String fileName ="";
//title标题
StringBuffer title = new StringBuffer();
//格式
Font titlefont = new Font("宋体",Font.BOLD,16);//标题
Font xfont = new Font("宋体",Font.PLAIN,12) ;// X轴
Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y轴
Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部
title.append("标题");
//数据集
CategoryDataset dataset = getDataSet();
//创建图表
JFreeChart chart = ChartFactory.createLineChart(title.toString(),
"日期", // 目录轴的显示标签
"结果", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
chart.getTitle().setFont(titlefont);
CategoryPlot plot = chart.getCategoryPlot();// 图形的绘制结构对象
//x轴
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(xfont);
domainAxis.setTickLabelFont(xfont);
//调整方向
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
//y轴
ValueAxis valueAxis = plot.getRangeAxis();
valueAxis.setLabelFont(yfont);
valueAxis.setTickLabelFont(yfont);
chart.getLegend().setItemFont(kfont);
//让字体清晰
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
LineAndShapeRenderer lineShapeRenderer = (LineAndShapeRenderer)plot.getRenderer();
lineShapeRenderer.setBaseShapesVisible(true);
lineShapeRenderer.setBaseLinesVisible(true);
FileOutputStream outStream = null;
try {
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
fileName = "/chartServlet/DisplayChart?filename=";
fileName += ServletUtilities.saveChartAsPNG(chart, 800, 350, info, session);
/*
//ieTemp 是ie在系统中临时目录,可以将图片暂存到该目录下
outStream = new FileOutputStream(getIeTemp());
ChartUtilities.writeChartAsPNG(outStream, chart, 800, 500);
*/
} catch (Exception e) {
log.error(e, e);
}finally{
try {
outStream.close();
} catch (Exception e) {
log.error(e, e);
e.printStackTrace();
}
}
this.setFileName(fileName);
return fileName;
}
/**
* 计算图表的数据集
*
* @return
* @author 成溪先生
* @createTime 2010-1-4
*/
private CategoryDataset getDataSet(){
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
...
dataset.addValue(Number value, Comparable rowKey, Comparable columnKey);
return dataset;
}
4. 后台已经将图生成,页面只需找到该图就可以显示了,看代码:
<h:graphicImage alt="jfreechart折线图" url="#{backingBean.fileName}"></h:graphicImage>
5.运行 ok! 本例只完成了带数据点折线图,其他的类似,可以推敲之。