extjs建立jfreechart柱状图

来源:互联网 发布:适合干性皮肤的水 知乎 编辑:程序博客网 时间:2024/05/16 08:45

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图片的urlpublic String getStatictis() throws Exception {return uss.getStatictis();}public void createBarChart() {// 1.获取数据dataset = getDataSet();// 2.构造chartcreateBarChart3D();// 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;}}


0 0
原创粉丝点击