1、JAR包下载
官网下载地址:http://sourceforge.net/projects/jfreechart/files/
2、lib中引入JAR包
jfreechart-x.x.xx.jar
jcommon--x.x.xx.jar
3、配置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>/DisplayChart</url-pattern>
</servlet-mapping>
4、源码实例
@RequestMapping("getHeightAgeChart.do")
@ResponseBody
public String createHeightAgeChart(HttpServletRequest request){
String title = "身高—年龄成长曲线"; // 报表题目,字符串类型
String xtitle = "年龄(月)"; // 横轴标题
String rangTitle = "身高(cm)"; // 纵(值)轴名称
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries s1 = new XYSeries("小明");
s1.add(0,48);
s1.add(3,50);
s1.add(6,60);
s1.add(8,70);
s1.add(12,75);
s1.add(18,82);
s1.add(24,88);
s1.add(30,91);
s1.add(36,96);
dataset.addSeries(s1);
XYSeries s2 = new XYSeries("小芳");
s2.add(0,50);
s2.add(3,55);
s2.add(6,65);
s2.add(8,75);
s2.add(12,80);
s2.add(18,87);
s2.add(24,92);
s2.add(30,98);
s2.add(36,108);
dataset.addSeries(s2);
return ReportTool .XYSplineRendererGo(dataset, title, xtitle, rangTitle, request);
}
public class ReportTool {
public static String XYSplineRendererGo(XYSeriesCollection dataset, String title, String xtitle, String rangTitle, HttpServletRequest request){
JFreeChart chart = ChartFactory.createXYLineChart(
title, // 报表题目,字符串类型
xtitle, // 横轴标题
rangTitle, // 纵(值)轴名称
dataset, // 数据集
PlotOrientation.VERTICAL,
true, // 显示图例
false,
false
);
// 设置图表标题的字体
Font font = new Font("黑体",Font.CENTER_BASELINE,20);
chart.getTitle().setFont(font);
// 设置图例字体
Font xfont = new Font("宋体",Font.PLAIN,12);
chart.getLegend().setItemFont(xfont);
XYPlot plot = (XYPlot) chart.getPlot();
ValueAxis domainAxis= plot.getDomainAxis();
domainAxis.setLowerMargin(0.1);// 设置距离图片左端距离此时为10%
domainAxis.setUpperMargin(0.1);// 设置距离图片右端距离此时为百分之10
domainAxis.setLabelFont(xfont);// X轴标题
domainAxis.setTickLabelFont(xfont);// X轴数值
domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色
NumberAxis rangeAxis=(NumberAxis)plot.getRangeAxis();
rangeAxis.setUpperMargin(0.1);// 设置最高的一个柱与图片顶端的距离(最高柱的10%)
rangeAxis.setLabelFont(xfont);// Y轴标题
rangeAxis.setTickLabelFont(xfont);// Y轴数值
rangeAxis.setLabelPaint(Color.BLUE) ;// 字体颜色
rangeAxis.setTickLabelFont(xfont);
NumberFormat numberformat = new DecimalFormat("0");
rangeAxis.setNumberFormatOverride(numberformat);// 设置y轴以百分比方式显示
//平滑曲线
XYItemRenderer renderer = new XYSplineRenderer();
renderer.setItemLabelPaint(Color.black);//字体为黑色
renderer.setItemLabelsVisible(true);
renderer.setItemLabelFont(font);
//采集点采用百分比
// NumberFormat nfP = NumberFormat.getPercentInstance();
// nfP.setMaximumFractionDigits(2); //百分数格式
// renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator("{2}",NumberFormat.getPercentInstance(),NumberFormat.getPercentInstance()));
plot.setRenderer(renderer);
String filename;
String graphURL = "";
int width = 800;
int height = 600;
try {
filename = ServletUtilities.saveChartAsJPEG(chart, width, height, request.getSession());
graphURL= request.getContextPath() + "/DisplayChart?filename=" + filename;
} catch (IOException e) {
e.printStackTrace();
}
return graphURL;
}
}
后台返回为绘制成图片的图表地址字符串,在前台可以使用任意元素接收
注:之后看了别人的博客,写的不错,弄个连接以后看
http://juliana-only.iteye.com/blog/393266