在JSP页面制作柱状图,可以根据数据的变化动态实时的变化

主要是使用EXTJS自带的插件达到效果

  1. Ext.require('Ext.chart.*');
  2. Ext.require([ 'Ext.Window', 'Ext.fx.target.Sprite', 'Ext.layout.container.Fit', 'Ext.window.MessageBox' ]);

然后编写显示的位置(模板)

  1. var chartComMonthBudgetPanel = Ext.create('Ext.Panel', {
  2. id : 'chartComMonthBudgetPanel',
  3. // store : matDeptMonthBudgetStore,
  4. title : '预算分解情况',
  5. frame : true
  6.  
  7. });

在需要的地方展示出来,我将代码打包写在函数里,我自己在业务中调用查询

  1. function _selectMatDeptMonthBudget() {
  2. var records = Ext.getCmp('comMatBudgetCatPanel').getSelectionModel().getSelection();
  3.  
  4. if (Ext.getCmp('YEAR_').getValue() == null) {
  5. Ext.MessageBox.show({
  6. title : '提示',
  7. msg : '请输入年份',
  8. buttons : Ext.MessageBox.OK,
  9. icon : Ext.MessageBox.WARNING
  10. });
  11. return false;
  12. }
  13.  
  14. if (records.length == 0) {
  15. Ext.MessageBox.show({
  16. title : '提示',
  17. msg : '请选择物料预算分类',
  18. buttons : Ext.MessageBox.OK,
  19. icon : Ext.MessageBox.WARNING
  20. });
  21. return false;
  22. }
  23.  
  24. if (Ext.getCmp('DEPT_CODE_').getValue() == null) {
  25. Ext.MessageBox.show({
  26. title : '提示',
  27. msg : '请选择作业区',
  28. buttons : Ext.MessageBox.OK,
  29. icon : Ext.MessageBox.WARNING
  30. });
  31. return false;
  32. }
  33.  
  34. Ext.Ajax.request({
  35. url : 'loadMat.do',
  36. type : 'ajax',
  37. method : 'POST',
  38. params : {
  39. 'YEAR_' : Ext.getCmp('YEAR_').getValue(),
  40. 'MAT_BUDGET_CAT_ID_' : records[0].get('MAT_BUDGET_CAT_ID_'),
  41. 'DEPT_CODE_' : Ext.getCmp('DEPT_CODE_').getValue()
  42. },
  43. callback : function(options, success, response) {
  44. if (success) {
  45. var data = Ext.decode(response.responseText);
  46. if (data.success) {
  47. matDeptYearBudget = data.matDeptYearBudget;
  48. if (matDeptYearBudget != null) {
  49. Ext.getCmp('DEPT_YEAR_BUDGET_').setValue(matDeptYearBudget.BUDGET_);
  50. } else {
  51. Ext.getCmp('DEPT_YEAR_BUDGET_').setValue(0);
  52. }
  53. } else {
  54. Ext.getCmp('DEPT_YEAR_BUDGET_').setValue(0);
  55. }
  56. }
  57. }
  58. });
  59.  
  60. Ext.Ajax.request({
  61. url : 'select.do',
  62. type : 'ajax',
  63. method : 'POST',
  64. params : {
  65. 'YEAR_' : Ext.getCmp('YEAR_').getValue(),
  66. 'MAT_BUDGET_CAT_ID_' : records[0].get('MAT_BUDGET_CAT_ID_'),
  67. 'DEPT_CODE_' : Ext.getCmp('DEPT_CODE_').getValue()
  68. },
  69. callback : function(options, success, response) {
  70. if (success) {
  71. var data = Ext.decode(response.responseText);
  72.  
  73. if(chartComMonthBudget != null){
  74. Ext.getCmp('chartComMonthBudgetPanel').removeAll(true);
  75. ComMonthBudgetData =[];
  76. }
  77.  
  78. if (data.success) {
  79.  
  80. matDeptMonthBudgetList = data.matDeptMonthBudgetList;
  81. for(var i=1;i<=12;i++){
  82. var a=0;
  83. for(var j = 0; j < matDeptMonthBudgetList.length; j++){
  84. if(matDeptMonthBudgetList[j].MONTH_==i){
  85. ComMonthBudgetData.push({MONTH_ : matDeptMonthBudgetList[j].MONTH_ + '月',MONTH_BUDGET_ : matDeptMonthBudgetList[j].BUDGET_});
  86. a=a+1;
  87. }
  88. }
  89. if(a==0){
  90. ComMonthBudgetData.push({MONTH_: i +'月',MONTH_BUDGET_ : 0});
  91. }
  92. }
  93. }
  94.  
  95. Ext.define('WeatherPoint', {
  96. extend : 'Ext.data.Model',
  97. fields : ['MONTH_BUDGET_','MONTH_']
  98. });
  99. var ComMonthBudgetStore = Ext.create('Ext.data.Store', {
  100. model : 'WeatherPoint',
  101. data : ComMonthBudgetData
  102. });
  103.  
  104. //主要是此处的代码
  105. chartComMonthBudget = Ext.create('Ext.chart.Chart',{
  106. id : chartComMonthBudget,
  107. height:350,
  108. width:600,
  109. style: 'background:#fff',
  110. animate: true,
  111. shadow: true,
  112. store : ComMonthBudgetStore,
  113. axes: [{
  114. type: 'Numeric',
  115. position: 'left',
  116. fields: ['MONTH_BUDGET_'],
  117. label: {
  118. renderer: Ext.util.Format.numberRenderer('0,0')
  119. },
  120. grid: true,
  121. minimum: 0
  122. }, {
  123. type: 'Category',
  124. position: 'bottom',
  125. fields: ['MONTH_'],
  126. title: '预算分解情况',
  127. minimum: 1
  128. }],
  129. series: [{
  130. type: 'column',
  131. axis: 'left',
  132. highlight: true,
  133. tips: {
  134. trackMouse: true,
  135. width: 140,
  136. height: 28,
  137. renderer : function(storeItem, item) {
  138. this.setTitle(item.value[0] + ': '
  139. + Ext.util.Format.usMoney(item.value[1]));
  140. }},
  141. label: {
  142. display: 'insideEnd',
  143. // 'text-anchor': 'middle',//这句代码没有,在很多参考地方有,但查资料后不正确,没有。
  144. field: 'MONTH_BUDGET_',
  145. renderer: Ext.util.Format.numberRenderer('0'),
  146. orientation: 'vertical',
  147. color: '#333'
  148. },
  149. xField: 'MONTH_',
  150. yField: 'MONTH_BUDGET_'
  151. }]
  152.  
  153. });
  154. Ext.getCmp('chartComMonthBudgetPanel').add(chartComMonthBudget);
  155. }
  156. }
  157. });
  158.  
  159. }

我需要处理查询时,在点击查询后,显示最新的数据图,于是使用了代码

  1. if(chartComMonthBudget != null){
  2. Ext.getCmp('chartComMonthBudgetPanel').removeAll(true);
  3. ComMonthBudgetData =[];
  4. }

使每次显示最新的值。

后期对代码做了进一步的优化,由于Ext.chart.Chart本身就是EXTJS的一个组件,可以直接显示,不用放在面板里。对数据的存放做了处理

  1. var matComMonthBudgetStore = Ext.create('Ext.data.Store', {
  2. storeId : 'matComMonthBudgetStore',
  3. autoLoad : false,
  4. pageSize : -1,
  5. fields : [ 'MONTH_', 'MONTH_BUDGET_' ]
  6. });
  1. var matComMonthBudgetChart = Ext.create('Ext.chart.Chart', {
  2. id : 'matComMonthBudgetChart',
  3. store : matComMonthBudgetStore,
  4. title : '预算分解情况',
  5. frame : true,
  6. animate : true,
  7. shadow : true,
  8. axes : [ {
  9. type : 'Numeric',//Numeric轴来展示区域序列数据
  10. position : 'left',//numeric轴放在图表左侧
  11. fields : [ 'MONTH_BUDGET_' ],
  12. label : {
  13. renderer : Ext.util.Format.numberRenderer('0,0')
  14. },
  15. grid : true,//category和numeric轴都有grid集合,水平线和垂直线会覆盖图表的背景
  16. minimum : 0
  17. }, {
  18. type : 'Category',//Category轴来显示数据节点的名字
  19. position : 'bottom',//category轴放在图表下部
  20. fields : [ 'MONTH_' ],
  21. title : '预算分解情况',
  22. minimum : 1
  23. } ],
  24. series : [ {
  25. type : 'column',//显示图形类型- line:则线图;column:柱形图;radar:雷达图
  26. axis : 'left',
  27. highlight : true,//如果设置为真,当鼠标移动到上面时,高亮。
  28. tips : {//为可视化标记添加工具栏
  29. trackMouse : true,
  30. width : 140,
  31. height : 28,
  32. renderer : function(storeItem, item) {
  33. this.setTitle(item.value[0] + ': ' + Ext.util.Format.usMoney(item.value[1]));
  34. }
  35. },
  36. label : {
  37. display : 'insideEnd',//指定饼图标签的位置。包括"rotate", "middle", "insideStart", "insideEnd", "outside", "over", "under", 或者 "none"可以用来渲染标签。
  38. field : 'MONTH_BUDGET_',//标签要展示的字段的名称。
  39. renderer : Ext.util.Format.numberRenderer('0'),
  40. orientation : 'vertical',//"horizontal" 或者 "vertical"
  41. color : '#333'
  42. },
  43. xField : 'MONTH_',
  44. yField : 'MONTH_BUDGET_'
  45. } ]
  46. });
  1. Ext.Ajax.request({
  2. url : 'select.do',
  3. type : 'ajax',
  4. method : 'POST',
  5. params : {
  6. 'YEAR_' : Ext.getCmp('YEAR_').getValue(),
  7. 'MAT_BUDGET_CAT_ID_' : records[0].get('MAT_BUDGET_CAT_ID_'),
  8. 'DEPT_CODE_' : Ext.getCmp('DEPT_CODE_').getValue()
  9. },
  10. callback : function(options, success, response) {
  11. if (success) {
  12. var data = Ext.decode(response.responseText);
  13. if (data.success) {
  14. var matDeptMonthBudgetList = data.matDeptMonthBudgetList;
  15. var matComMonthBudgetStore = Ext.data.StoreManager.lookup('matComMonthBudgetStore');
  16. matComMonthBudgetStore.removeAll();
  17. for (var i = 0; i < 12; i++) {
  18. matComMonthBudgetStore.add({
  19. MONTH_ : (i + 1) + '月',
  20. MONTH_BUDGET_ : (matDeptMonthBudgetList[i].BUDGET_ != null ? matDeptMonthBudgetList[i].BUDGET_ : 0)
  21. });
  22. }
  23. }
  24. }
  25. }
  26. });

欢迎大家阅览,多多评论其中的不足!!

为工程师之路添砖加瓦!!

Extjs 制作柱状图的更多相关文章

  1. Vue整合d3.v5.js制作--柱状图(rect)

    先上效果图: 图中柱状图变成纯蓝色是鼠标滑动过的颜色(颜色可改,本人配色能力十分的强,建议直接用默认设置即可 ( ᖛ ̫ ᖛ )ʃ)) 1.环境说明 Vue版本:"vue": &q ...

  2. 浅谈Extjs radiogroup change事件与items下的checked属性

    在使用Extjs制作crud时,由于添加和修改界面的高度相似,使用了相同的row字段. 在角色字段中使用了change监听事件,用于动态的无效化权限分配字段,因为权限分配界面默认没有隐藏,设定了che ...

  3. Excel中用REPT函数制作图表

    本文从以下七个方面,阐述在Excel中用REPT函数制作图表: 一. 图形效果展示 二. REPT语法解释 三. REPT制作条形图 四. REPT制作漏斗图 五. REPT制作蝴蝶图 六. REPT ...

  4. CSS3 - vue中纯css实现柱状图表效果

    背景 以前我们制作柱状图都用echarts或者其他同类型的图表插件 这次是个移动端的需求,而且这个图表需要动画 使用echarts就会显得过重,而且动画达不到我想要的效果(主要是我自己愚蠢想不到好的动 ...

  5. D3+svg 案例

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Python 数据图表工具的比较

    Python 的科学栈相当成熟,各种应用场景都有相关的模块,包括机器学习和数据分析.数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些. 幸运的是,过去 ...

  7. C语言I 博客作业03

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 作业要求 我在这个课程的目标是 掌握关系运算.if-else语句.格式化输入语句scanf(),以及常用的数学库函数 这个作业在那个具体方 ...

  8. ELK学习实验009:安装kibana的仪表盘

    一 metricbeat仪表盘 1.1 安装metricbeat仪表盘 可以将metricbeat数据在kibana中展示 [root@node4 ~]# cd /usr/local/metricbe ...

  9. ArcMap从建库到出图

    1前言 本篇博主将介绍关于ArcMap建库.数据采集.拓扑检查.图表.制作符号等的基本操作. 2问题阐述 (1)检查现有block(线要素)图层,保证所有要素闭合,并将其转换为parcel(面要素): ...

随机推荐

  1. [NOIP2014]自测

    这两天做完了2014年的noip提高. 因为以前看了SDSC2016时gty的课件,题目思路都知道了一点,做起来没多大困难. 100+100+75+100+100+70=545 里面水分好多,好多题都 ...

  2. Struts2文件上传和文件下载

    一.单个文件上传 文件上传需要两个jar包: 首先制作一个简单的页面,用于实现文件上传 <h1>单个文件上传</h1> <s:form action="uplo ...

  3. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  4. JSPatch

    链接: JSPatch github项目主页 JSPatch技术文档 JSPatch基础用法总结 JSPatch – 动态更新iOS APP JSPatch使用小记 end

  5. codevs 2594 解药还是毒药

    2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...

  6. 超棒的javascript移动触摸设备开发类库-QUOjs

    开发手机端网站.少不了手势事件? 手势事件怎么写? 手势事件怎么去判断? 对于新手来说.真的很Dan碎! 下面为大家推荐一款插件QUOjs 官方网站http://quojs.tapquo.com/ 这 ...

  7. VMware Workstation中网络连接之桥接、NAT和Host-only

    在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...

  8. 重新注册IIS

    出现问题的原因是先装了.NET4.0,再装IIS造成 处理方法:管理员权限执行cmd, C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_reg ...

  9. linux搭载discuz

    公司论坛是用discuz,简单了解了一下,原来是php+mysql搭载的论坛,于是本鸟便试试搭载discuz试试怎么玩,下面是linux下搭载discuz的过程 第一步是下载,由于discuz是运行在 ...

  10. bzoj1584

    1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 467  Solved: 31 ...