Java Web 2.0架构开发与项目实战购书网http://product.dangdang.com/product.aspx?product_id=20697597
JFreeChart的下载地址为http://sourceforge.net/project/showfiles.php?group_id=15494,解压下载的jfreechart_1.0.9.zip包到指定位置,为了配置成功,需要lib目录中的jfreechart-1.0.9.jar,jcommon-1.0.12.jar文件拷贝到TEST/WEB-INF/LIB中。 还需要插件:struts2-jfreechart-plugin-2.0.11.jar(在struts2发布包的lib目录下可以找到),
从配置文件开始:在struts.xml文件增加一个对生成图表包,如下
300 240
300 400
|
创建Action类,代码:
ipackage com.struts2.app; import org.jfree.chart.JFreeChart; import com.opensymphony.xwork2.ActionSupport; public class ChartAction extends ActionSupport { private static final long serialVersionUID = 1L; private JFreeChart chart;
@Override public String execute() throws Exception { chart = FruitService.createBarChart(); return SUCCESS; } public JFreeChart getChart() { return chart; } } |
package com.struts2.app; import org.jfree.chart.JFreeChart;
import com.opensymphony.xwork2.ActionSupport; public class PieAction extends ActionSupport{ private static final long serialVersionUID = 1L; private JFreeChart chart; public String execute() throws Exception { chart = FruitService.createPaiChart(); return SUCCESS; } public JFreeChart getChart() { return chart; } } |
package com.struts2.app; import java.awt.BasicStroke; import java.awt.Color; import java.text.DecimalFormat; import java.text.NumberFormat; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.labels.StandardPieToolTipGenerator; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; public class FruitService { public static JFreeChart createBarChart() { CategoryDataset dataset = getDataSet2(); JFreeChart chart = ChartFactory.createBarChart3D( "水果产量图", // 图表标题 "水果", // 目录轴的显示标签 "产量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) true, // 是否生成工具 true // 是否生成URL链接 ); return chart; }
private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "广州", "荔枝"); return dataset; } public static JFreeChart createPaiChart() { DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题 data, true, // 是否显示图例 false, false ); PiePlot plot = (PiePlot) chart.getPlot(); resetPiePlot(plot); return chart; }
private static void resetPiePlot(PiePlot plot) { String unitSytle = "{0}={1}({2})";
plot.setNoDataMessage("无对应的数据,请重新查询。"); plot.setNoDataMessagePaint(Color.red);
//指定 section 轮廓线的厚度(OutlinePaint不能为null) plot.setOutlineStroke(new BasicStroke(0)); //设置第一个 section 的开始位置,默认是12点钟方向 plot.setStartAngle(90);
plot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle, NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
//指定图片的透明度 plot.setForegroundAlpha(0.65f);
//引出标签显示样式 plot.setLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle, NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
//图例显示样式 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle, NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); }
private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果",100); dataset.setValue("梨子",200); dataset.setValue("葡萄",300); dataset.setValue("香蕉",400); dataset.setValue("荔枝",500); return dataset; }
}
|
jsp页面表现输出图片
<%@ page contentType="text/html; charset=UTF-8"%>
使用柱图和饼图列取所有水果产量
柱图: 饼图:
|