工作辞了,找工作之余,学习了一下jfreechart图表生成,结合大虾们的著作,小弟进行了系统的总结如下(获益匪浅):
struts2与jfreechart结合首先需要一个插件包struts2-jfreechart-plugin-2.1.6.jar;然后导入jfreechart的
两个包以及struts2的7个应用包、包结构见附件a.jpg;附件有项目的压缩包,大家可以下载使用一下。
写一个公用的service类,里面包含生成柱状图、饼状图、折线图的方法,另附件提供一份jfreechart所有类和方法的
详细解释,你可以根据这些方法把图表设置的美轮美奂。
package aokunsang.chartControl;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
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.axis.ValueAxis;
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.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
public class JFreeChartService {
//----------------------------------------获取饼状图开始-------------------------------------------------------
/**
* 获取饼状图
* @return
*/
public static JFreeChart createPieChart(){
PieDataset pieData = getPieDataset();
JFreeChart pieChart = ChartFactory.createPieChart3D("水果销量图", pieData, true, true, false);
PiePlot3D piePlot = (PiePlot3D)pieChart.getPlot();
piePlot.setBackgroundPaint(Color.WHITE);
piePlot.setLabelFont(new Font("黑体",Font.BOLD,15));
resetPlot(piePlot);
pieChart.getLegend().setItemFont(new Font("黑体",Font.BOLD,15)); //设置引用标签字体
pieChart.getTitle().setFont(new Font("华文行楷",Font.BOLD,32));
return pieChart;
}
private static PieDataset getPieDataset(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("苹果", 260);
data.setValue("荔枝", 250);
data.setValue("橘子", 150);
data.setValue("香蕉", 140);
data.setValue("菠萝", 200);
return data;
}
private static void resetPlot(PiePlot3D pieplot){
String unitStyle = "{0}={1}({2})";
pieplot.setNoDataMessage("没有对应的数据,请重新查询");
pieplot.setNoDataMessageFont(new Font("华文行楷",Font.BOLD,21));
pieplot.setNoDataMessagePaint(Color.BLUE);
// pieplot.setToolTipGenerator(new StandardPieToolTipGenerator(
// unitStyle,
// NumberFormat.getNumberInstance(),
// new DecimalFormat("0.00%"))
// );
//设置图例显示样式
pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(
unitStyle,
NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%"))
);
//设置引用标签显示样式
pieplot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
unitStyle,
NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
}
。。。。。。。
然后写三个Action,分别用于显示三种图例,它们的方法几乎相同。Action中都得定义一个JFreeChart,对象名字必须
为chart。
public class BarFreeChartAction extends ActionSupport {
private JFreeChart chart;
public JFreeChart getChart() {
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
public String execute(){
this.setChart(JFreeChartService.createBarChart());
return SUCCESS;
}
}
最重要的就是struts.xml配置文件。
<package name="jfreechartPackage" extends="jfreechart-default" namespace="/"> <!-- 柱状图 --> <action name="barFreeChartAction" class="aokunsang.action.BarFreeChartAction"> <result name="success" type="chart"> <param name="width">700</param> <param name="height">400</param> </result> </action>
需要继承jfreechart-default.xml,可查看struts2-jfreechart-plugin-2.1.6.jar中org.apache.struts2.dispatcher包下面的struts-plugin.xml文件:
<struts> <package name="jfreechart-default" extends="struts-default"> <result-types> <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"> <param name="height">150</param> <param name="width">200</param> </result-type> </result-types> </package> </struts>
最后就是简单的jsp文件了:
<html>
<head>
<title>jfreechart的图例</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Content-Type" content="UTF-8">
<body>
<center>饼状图和柱状图的效果呈现如下</center>
饼状图(3D图):<br/>
<img border="0" src="pieFreeChartAction.action"><p> </p>
柱状图(3D图):<br/>
<img border="0" src="barFreeChartAction.action"><p> </p>
折线图(非3D图):<br/>
<img border="0" src="lineFreeChartAction.action">
</body>
</html>