extjs建立jfreechart柱状图

1.extjs前台代码

Ext
		.onReady(function() {

			Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
			
			var dpm = 'submitter_dpm';

			var tools = [ {
				id : 'close',
				handler : function(e, target, panel) {
					panel.ownerCt.remove(panel, true);
				}
			} ];
			
			var viewport = new Ext.Viewport({
				
				listeners:{
					beforerender : function(){
						Ext.Ajax.request({
							url : '../sys_pro_stat/userAction_pro_stat_createBarChart',
							method : 'POST',
							params : {fields : dpm},
							success : function(response, options) {
							},
							failure : function(response, options) {
								Ext.MessageBox.alert('失败', '请求超时或网络故障,错误编号:'
										+ response.status);
							}
						});
					}
					
				},
						layout : 'fit',
						items : [ {
							xtype : 'portal',
							region : 'center',
							margins : '35 5 5 0',
							items : [ {
								columnWidth : .9,
								style : 'padding:10px 0 10px 10px',
								items : [ {
									title : '提案统计',
									tools : tools,
									html : '<p align="center"><img alt="提案统计" src="../sys_pro/stat/chart_dpm.jpeg"></p>'
								} ]
							} ]
						} ]
					});

		});

2. 后台 Java 代码

public class UserAction_Stat extends UserAction {
	private Proposal proposal;
	private UserService_Stat uss;
	CategoryDataset dataset;
	String fields;
	JFreeChart chart;

	// 返回值为jfreechart导出的jpg图片的url
	public String getStatictis() throws Exception {
		return uss.getStatictis();
	}

	public void createBarChart() {
		// 1.获取数据
		dataset = getDataSet();
		// 2.构造chart
		createBarChart3D();

		// 3. 处理chart中文显示问题
		processChart(chart);

		// 4. chart输出图片,获取图片路径
		writeChartAsImage(chart);
		
	}

	

	/**
	 * 获取数据库数据
	 * */
	public CategoryDataset getDataSet() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		List<Object[]> list = null;
		list = uss.loadDataFromDB(fields);
		Number value = 0;
		String rowKeys = null;
		String columnKeys = null;
		if("submitter_dpm".equals(fields)){
			rowKeys = "部门提案数";
		}else if("category".equals(fields)){
			rowKeys = "分类提案数";
		}
		for (Object[] object : list) {
			value = (Number) object[1];
			columnKeys = (String) object[0];
			dataset.addValue(value, rowKeys, columnKeys);
		}
		return dataset;
	}
	
	/**
	 * 创建图例
	 * */
	public void createBarChart3D(){
		String xtitle = null;
		if("submitter_dpm".equals(fields)){
			xtitle = "部门";
		}else if("category".equals(fields)){
			xtitle = "类别";
		}
		chart = ChartFactory.createBarChart3D("提案总数统计", // 图表标题
				xtitle, // 目录轴的显示标签
				"数量", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				true, // 是否生成工具
				true // 是否生成URL链接
				);
	}

	/**
	 * 解决图表汉字显示问题
	 * 
	 * @param chart
	 */
	public void processChart(JFreeChart chart) {
		chart.setBackgroundPaint(SystemColor.controlHighlight);  
		  
        // 设置图标标题字体  
        chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 20));  
  
        CategoryPlot plot = chart.getCategoryPlot();  
        // 设置横轴标题字体  
        plot.getDomainAxis().setLabelFont(new Font("宋体", Font.PLAIN, 14));  
        plot.getDomainAxis().setCategoryLabelPositions(  
                CategoryLabelPositions.UP_45);  
  
        // 设置横轴标记的字体  
        plot.getDomainAxis().setTickLabelFont(new Font("宋体", Font.PLAIN, 12));  
        // 设置横轴标记字体颜色  
        plot.getDomainAxis().setTickLabelPaint(Color.RED);  
  
        // 设置纵轴标题字体  
        plot.getRangeAxis().setLabelFont(new Font("宋体", Font.PLAIN, 14));  
  
        // 设置纵轴标记字体  
        NumberAxis3D numberAxis3D = (NumberAxis3D) plot.getRangeAxis();  
        numberAxis3D  
                .setStandardTickUnits(NumberAxis3D.createIntegerTickUnits());  
        numberAxis3D.setTickLabelPaint(Color.RED);  
  
        // 设置图例字体  
        BarRenderer3D renderer3D = (BarRenderer3D) plot.getRenderer();  
        renderer3D.setBaseLegendTextFont(new Font("宋体", Font.PLAIN, 14));  
        renderer3D.setSeriesPaint(0, Color.ORANGE);
        
        //设置数值显示在顶部
        renderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer3D.setBaseItemLabelsVisible(true);
        renderer3D.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER));
        renderer3D.setItemLabelAnchorOffset(10D);//设置柱形图上的文字偏离值
        
        //设置柱形图大小比例
      int k = dataset.getColumnCount();  
      if (k == 1) {  
          plot.getDomainAxis().setLowerMargin(0.26);  
          plot.getDomainAxis().setUpperMargin(0.66);  
      } else if (k < 6) {  
          double margin = (1.0 - k * 0.08) / 3;  
          plot.getDomainAxis().setLowerMargin(margin);  
          plot.getDomainAxis().setUpperMargin(margin);  
          ((BarRenderer3D) plot.getRenderer()).setItemMargin(margin);  
      } else {  
          ((BarRenderer3D) plot.getRenderer()).setItemMargin(0.1);  
      }
	}

	/**
	 * 输出图片
	 * 
	 * @param chart
	 */
	public void writeChartAsImage(JFreeChart chart) {
		String fileName = null;
		String folderName = "stat";
		String subPath = "/sys_pro/" + folderName;
		String tempJpegPath = ServletActionContext.getServletContext()
				.getRealPath(subPath);
		if("submitter_dpm".equals(fields)){
			fileName  = "chart_dpm.jpeg";
		}else if("category".equals(fields)){
			fileName = "chart_category.jpeg";
		}
		
		// 在目录下生成图片
		File file = new File(tempJpegPath + "/" + fileName);
		try {
			ChartUtilities.saveChartAsJPEG(file, chart, 800, 450);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	// =====getter、setter====
	public UserService_Stat getUss() {
		return uss;
	}

	@Resource(name = "userServiceImp_stat_pro")
	public void setUss(UserService_Stat uss) {
		this.uss = uss;
	}
	
	public String getFields() {
		return fields;
	}

	public void setFields(String fields) {
		this.fields = fields;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值