材料:
(1) JFreeChart的jar包:jcommon-1.0.17.jar,jfreechart.jar,struts2-jfreechart-plugin-2.1.6.jar
(2) Struts2的jar 包,略
工具:Eclipse IDE,Server用tomcat好了
开始整合:
1. 首先新建Dynamic Web Project,并且整合上Struts2,具体jar包,配置等,不赘述。然后发布到tomcat,测试一下。顺便把JFreeChart的3个jar包也放入WEB-INF/lib下,会自动导入到project。
2. 创建一个Action类,ChartAction
package com.leon.action;
import javax.annotation.Resource;
import org.jfree.chart.JFreeChart;
import org.springframework.stereotype.Controller;
import com.leon.service.ChartService;
import com.opensymphony.xwork2.ActionSupport;
public class ChartAction extends ActionSupport {
private JFreeChart chart;
public String jfreeChart(){
this.chart = createChart();
return SUCCESS;
}
//setter and getter
public JFreeChart getChart() {
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
}
说明:该Action类一定要定义一个成员变量,命名为chart,并且生成setter/getter,获得chart的Action方法中为chart变量创建引用的JFreeChart实例,来自方法createChart(),如下:
public JFreeChart createChart() {
double[][] data = new double[][] {{1320,720,830,400,1000,1500},{500,300,400,100,450,550}};
String[] rowKeys = {"佣金","奖金"};
String[] columnKeys = {"201201", "201202", "201203", "201204", "201205", "201206"};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
JFreeChart chart = ChartFactory.createBarChart3D("2012上半年佣金",
"年月","金额",dataset,
PlotOrientation.VERTICAL,
true,
false,
false);
//设置标题字体,可以处理乱码问题
chart.getTitle().setFont(new Font("宋体", Font.BOLD,14));
CategoryPlot plot = chart.getCategoryPlot();
//X轴
CategoryAxis domainAxis = plot.getDomainAxis();
//设置设置X轴上的文字
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//设置X轴的标题文字
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
//Y轴
ValueAxis numberaxis = plot.getRangeAxis();
//设置设置Y轴上的文字
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
//设置Y轴的标题文字
numberaxis.setLabelFont(new Font("宋体", Font.BOLD, 14));
//这句代码解决了底部汉字乱码的问题
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
return chart;
}
实际项目运用中,这个产生chart的方法一般是不写在Action类中的,一般写在Service类中,让Action类调用。这边为了简单,就写在Action类中好了。关于JFreeChart的各种设置,格式等,也略去,网上很多,柱图也可以参考我的另一篇文章“Web工程采用JFreeChart作柱状图简单实例”。
3. struts2配置文件
<package name="jfreechart" extends="struts-default,jfreechart-default">
<action name="jfreechart" method="jfreeChart" class="com.leon.action.ChartAction" >
<result name="success" type="chart">
<param name="height">400</param>
<param name="width">700</param>
</result>
</action>
</package>
说明:注意几点,package要继承jfreechart-default,这里只是一种配置方式;然后result的type是“chart”;然后就是高度,宽度了。
4. jsp页面
JSP页面很简单,就是标签:
<img src="jfreechart" width="700" height="400" />
需要注意的是src的值实际是一个action来的,因为我的struts2过滤器通配符为/*,所以这么写,有的可能是*.do什么的,就要写成jfreechart.do。