1). 加入 jar 包:
Struts2中的包:
struts2-jfreechart-plugin-2.3.15.3.jar
jfreechart-1.0.13中的包:
jcommon-1.0.16.jar
jfreechart-1.0.13.jar
iText-2.1.5.jar
2). 具体使用参见: struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/jfreechart-plugin.html
I:在目标action中加入以下代码
private JFreeChart chart ;
public JFreeChart getChart() {
return chart ;
}
II:在struts2中配置:
//默认继承的包需要改为: jfreechart-default
<package name= "default" namespace ="/" extends="jfreechart-default" >
<action name= "SurveyAction_generateChart" class="surveyAction" method="generateChart">
//返回类型为chart
<result name= "generateChart_success" type="chart" >
<param name= "width">400</param >
<param name= "height">300</param >
</result>
</action>
</package >
注解:
在struts2-jfreechart-plugin-2.3.4.jar包中配置了一个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>
III:
public String generateChart() {
System. out.println("generateChart" );
Map<String, Integer> map= new HashMap<>();
map.put( "AA", 10);
map.put( "BB", 35);
map.put( "CC", 56);
map.put( "FF", 78);
map.put( "RR", 90);
chart = JFreeChartUtils. getChart("Hi 妹子", map);
return "generateChart_success" ;
}
IIII:
public class JFreeChartUtils {
public static JFreeChart getChart(String title, Map<String, Integer> data) {
DefaultPieDataset dataset = new DefaultPieDataset();
Set<String> keySet = data.keySet();
for (String key : keySet) {
dataset.setValue(key, data.get(key));
}
// 利用工厂类来创建3D饼图
/**
*
* String title - 要创建的饼图的标题
* PieDataset dataset - 要创建的饼图所使用的数据集
* boolean legend - 是否显示图例
* boolean tooltips - 用于配置图形是否生成提示信息
* boolean urls - 配置图形是否生成 URL
*
*/
JFreeChart chart = ChartFactory.createPieChart3D(title, dataset,
true, true , false);
// 使下说明标签字体清晰,去锯齿类似于
// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);的效果
chart.setTextAntiAlias( false);
// 图片背景色
chart.setBackgroundPaint(Color. white);
// 设置图标题的字体重新设置title(否组有些版本Title会出现乱码)
chart.getTitle().setFont(( new Font("隶书" , Font.CENTER_BASELINE , 20)));
// 设置图例(Legend)上的文字(//底部的字体)
chart.getLegend().setItemFont( new Font("隶书" , Font.CENTER_BASELINE , 15));
PiePlot3D plot = (PiePlot3D) chart.getPlot();
// 图片中显示百分比:默认方式
// 指定饼图轮廓线的颜色
plot.setBaseSectionOutlinePaint(Color. BLACK);
plot.setBaseSectionPaint(Color. BLACK);
// 设置无数据时的信息
plot.setNoDataMessage( "无对应的数据,请重新查询。" );
// 设置无数据时的信息显示颜色
plot.setNoDataMessagePaint(Color. red);
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator( new StandardPieSectionLabelGenerator(
"{0}={1}({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%" )));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator( new StandardPieSectionLabelGenerator(
"{0}({2})"));
plot.setLabelFont( new Font("隶书" , Font.TRUETYPE_FONT, 12));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(0.65f);
// 指定显示的饼图上圆形(false)还椭圆形(true)
plot.setCircular( false, true );
// 设置第一个 饼块section 的开始位置,默认是12点钟方向
plot.setStartAngle(90);
// 设置分饼颜色(不设置它会自己设置)
// plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144));
// plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144));
return chart;
}
}
IV:在页面进行显示
< img alt ="" src="${pageContext.request.contextPath} /SurveyAction_generateChart.action" >
以上是一个简单示例想要复杂些的可以查看jfreechart-1.0.13中的包中示例。