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目錄下可以找到),
10.21.3 使用JFreeChart
從配置文件開始:在struts.xml文件增加一個對生成圖表包,如下
<package name="chartaction" extends="jfreechart-default"> <action name="chartAction" class="com.struts2.app.ChartAction" > <result name="success" type="chart"> <!-- 這裏一定要設置爲chart--> <param name="height">300</param> <param name="width">240</param> </result> </action> <action name="pieAction" class="com.struts2.app.PieAction"> <result name="success" type="chart"> <!-- 這裏一定要設置爲chart--> <param name="height">300</param> <param name="width">400</param>
</result> </action> </package> |
創建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"%> <html> <head> <title>ListAllFruit4BarAndPie</title> </head> <body> <center> <h2> 使用柱圖和餅圖列取所有水果產量 </h2> </center> 柱圖: <img src="chartAction.action"> <br /> 餅圖: <img src="pieAction.action"> </body> </html> |