注意事项:
必须的jar包:
jcommon-1.0.22.jar
jfreechart-1.0.18.jar
struts2-jfreechart-plugin-2.2.3.jar,有了此jar,就可以使用 type 为 chart类型的result。
1、Action中的代码
package freshen.action.chart;
import java.awt.Color;
import java.awt.Font;
import java.util.Random;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.TextAnchor;
import com.opensymphony.xwork2.ActionSupport;
public class ShowChartAction extends ActionSupport {
private JFreeChart chart;
public String execute(){
System.out.println("图表Action");
return SUCCESS;
}
public JFreeChart getChart() {
//创建主题样式
StandardChartTheme standardChartTheme=new StandardChartTheme("CN");
//设置标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));
//设置图例的字体
standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,12));
//设置轴向的字体
standardChartTheme.setLargeFont(new Font("宋书",Font.ITALIC,8));
//应用主题样式
ChartFactory.setChartTheme(standardChartTheme);
chart =ChartFactory.createPieChart3D("图书销量统计图",
getDateSet(),true,false, false);
chart =ChartFactory.createBarChart("柱状图", "图书种类", "销售量", getDataSet());
chart = ChartFactory.createBarChart3D("广州肉类销量统计图", "肉类",
"销量",getDataSet2(), PlotOrientation.VERTICAL,true,false,false);
CategoryPlot plot = chart.getCategoryPlot();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//显示每个柱的数值,并修改该数值的字体属性
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
//默认的数字显示在柱子中,通过如下两句可调整数字的显示
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D);
//设置每个地区所包含的平行柱的之间距离
//renderer.setItemMargin(0.3);
plot.setRenderer(renderer);
//设置地区、销量的显示位置
//将下方的“肉类”放到上方
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
//将默认放在左边的“销量”放到右方
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
return chart;
}
private CategoryDataset getDataSet2(){
//double[][] data = new double[][] {{1310}, {720}, {1130}, {440}};
// String[] rowKeys = {"猪肉", "牛肉","鸡肉", "鱼肉"};
// String[] columnKeys = {""};
double[][] data = new double[][] {{1310, 1220, 1110, 1000},
{720, 700, 680, 640},
{1130, 1020, 980, 800},
{440, 400, 360, 300}};
String[] rowKeys = {"猪肉", "牛肉","鸡肉", "鱼肉"};
String[] columnKeys = {"广州", "深圳", "东莞", "佛山"};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
return dataset;
}
private CategoryDataset getDataSet() {
Random r =new Random();
DefaultCategoryDataset data =new DefaultCategoryDataset() ;
data.setValue(r.nextInt(200), "小说", "小说");
data.setValue(r.nextInt(200), "新闻", "新闻");
data.setValue(r.nextInt(200), "报纸", "报纸");
data.setValue(r.nextInt(200), "教材", "教材");
data.setValue(r.nextInt(200), "期刊", "期刊");
data.setValue(r.nextInt(200), "宣传册", "宣传册");
return data;
}
private PieDataset getDateSet() {
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("科技图书",1000);
data.setValue("社会哲学图书",300);
data.setValue("大众生活图书",700);
data.setValue("小说类图书",1700);
return data;
}
}
2、Action的配置
<package name="chartpk" extends="struts-default,<span style="color:#FF0000;"><strong>jfreechart-default</strong></span>">
<action name="testChartAction" class="freshen.action.chart.ShowChartAction">
<result name="success" type="chart">
<param name="width">600</param>
<param name="height">400</param>
</result>
</action>
</package>
3、页面的引用
<body>
<img alt="" src="testChartAction" id="chart" style="cursor: pointer;">
<script>
$("#chart").click(function(){
//alert("ddd");
$(this).attr("src","testChartAction?time="+new Date());
});
</script>
</body>