在struts2中使用jfreechart

注意事项:

必须的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>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值