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

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

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

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

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

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

function _selectMatDeptMonthBudget() {
var records = Ext.getCmp('comMatBudgetCatPanel').getSelectionModel().getSelection(); if (Ext.getCmp('YEAR_').getValue() == null) {
Ext.MessageBox.show({
title : '提示',
msg : '请输入年份',
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.WARNING
});
return false;
} if (records.length == 0) {
Ext.MessageBox.show({
title : '提示',
msg : '请选择物料预算分类',
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.WARNING
});
return false;
} if (Ext.getCmp('DEPT_CODE_').getValue() == null) {
Ext.MessageBox.show({
title : '提示',
msg : '请选择作业区',
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.WARNING
});
return false;
} Ext.Ajax.request({
url : 'loadMat.do',
type : 'ajax',
method : 'POST',
params : {
'YEAR_' : Ext.getCmp('YEAR_').getValue(),
'MAT_BUDGET_CAT_ID_' : records[0].get('MAT_BUDGET_CAT_ID_'),
'DEPT_CODE_' : Ext.getCmp('DEPT_CODE_').getValue()
},
callback : function(options, success, response) {
if (success) {
var data = Ext.decode(response.responseText);
if (data.success) {
matDeptYearBudget = data.matDeptYearBudget;
if (matDeptYearBudget != null) {
Ext.getCmp('DEPT_YEAR_BUDGET_').setValue(matDeptYearBudget.BUDGET_);
} else {
Ext.getCmp('DEPT_YEAR_BUDGET_').setValue(0);
}
} else {
Ext.getCmp('DEPT_YEAR_BUDGET_').setValue(0);
}
}
}
}); Ext.Ajax.request({
url : 'select.do',
type : 'ajax',
method : 'POST',
params : {
'YEAR_' : Ext.getCmp('YEAR_').getValue(),
'MAT_BUDGET_CAT_ID_' : records[0].get('MAT_BUDGET_CAT_ID_'),
'DEPT_CODE_' : Ext.getCmp('DEPT_CODE_').getValue()
},
callback : function(options, success, response) {
if (success) {
var data = Ext.decode(response.responseText); if(chartComMonthBudget != null){
Ext.getCmp('chartComMonthBudgetPanel').removeAll(true);
ComMonthBudgetData =[];
} if (data.success) { matDeptMonthBudgetList = data.matDeptMonthBudgetList;
for(var i=1;i<=12;i++){
var a=0;
for(var j = 0; j < matDeptMonthBudgetList.length; j++){
if(matDeptMonthBudgetList[j].MONTH_==i){
ComMonthBudgetData.push({MONTH_ : matDeptMonthBudgetList[j].MONTH_ + '月',MONTH_BUDGET_ : matDeptMonthBudgetList[j].BUDGET_});
a=a+1;
}
}
if(a==0){
ComMonthBudgetData.push({MONTH_: i +'月',MONTH_BUDGET_ : 0});
}
}
} Ext.define('WeatherPoint', {
extend : 'Ext.data.Model',
fields : ['MONTH_BUDGET_','MONTH_']
});
var ComMonthBudgetStore = Ext.create('Ext.data.Store', {
model : 'WeatherPoint',
data : ComMonthBudgetData
}); //主要是此处的代码
chartComMonthBudget = Ext.create('Ext.chart.Chart',{
id : chartComMonthBudget,
height:350,
width:600,
style: 'background:#fff',
animate: true,
shadow: true,
store : ComMonthBudgetStore,
axes: [{
type: 'Numeric',
position: 'left',
fields: ['MONTH_BUDGET_'],
label: {
renderer: Ext.util.Format.numberRenderer('0,0')
},
grid: true,
minimum: 0
}, {
type: 'Category',
position: 'bottom',
fields: ['MONTH_'],
title: '预算分解情况',
minimum: 1
}],
series: [{
type: 'column',
axis: 'left',
highlight: true,
tips: {
trackMouse: true,
width: 140,
height: 28,
renderer : function(storeItem, item) {
this.setTitle(item.value[0] + ': '
+ Ext.util.Format.usMoney(item.value[1]));
}},
label: {
display: 'insideEnd',
// 'text-anchor': 'middle',//这句代码没有,在很多参考地方有,但查资料后不正确,没有。
field: 'MONTH_BUDGET_',
renderer: Ext.util.Format.numberRenderer('0'),
orientation: 'vertical',
color: '#333'
},
xField: 'MONTH_',
yField: 'MONTH_BUDGET_'
}] });
Ext.getCmp('chartComMonthBudgetPanel').add(chartComMonthBudget);
}
}
}); }

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

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

使每次显示最新的值。

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

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

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

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

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. Hibernate中Java对象的三种状态

                                                                                     Hibernate中Java对象的三种 ...

  2. 第2章 Linux系统安装(2)_Linux系统分区及文件系统

    2. 系统分区 2.1 分区类型 (1)主分区:最多只能有4个 (2)扩展分区 ①最多只能有1个,主分区加扩展分区最多有4个. ②不能写入数据,只能包含逻辑分区 (3)逻辑分区 2.2 格式化(高级格 ...

  3. 用C#调用C++DLL(x64),总是提示找不到DLL

    用C#调用自己写的C++ DLL(x64),总是提示找不到DLL,调试可以,发布release老是提示找不到DLL(dll文件确定存在) 原因:Visual C++的DLL分发方式没选:调试默认选择: ...

  4. 可能是史上最强大的js图表库——ECharts带你入门

    PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...

  5. Error: Could not find the required version of the Java(TM) 2 Runtime Environment in'(null)'.

    今天拿到一台新机器,搭一下开发环境,安装个JDK是个很基本的事情,从Orale的网站上下了个安装,但是一直出下面的错: 我信了你的邪,Google了一圈,有人说是可能文件下载有问题,重新下载安装就可以 ...

  6. 个人作业——关于K米的产品案例分析

    Notice:本文所采用的K米版本为 Version:4.3.0 Release:20161014 第一部分 调研,评测 评测: 软件的bug,功能评测,黑箱测试 1.下载并使用,描述最简单直观的个人 ...

  7. java中使用MD5加密技术

    在项目中经常会对一些信息进行加密,现在常用的信息加密技术有:MD5.RSA.DES等,今天主要说一下,md5加密,以及如何在java代码根据自己的业务需求使用md5. MD5简介: MD5即Messa ...

  8. java 8

    java 8 发布已经有一段时间了,然而很多新特性被拒之门外,让人敬而生畏,但是,时代在进步,技术在发展,要追随时代的脚步就要跟随新的潮流.总结下java 8 中常用的小功能点,学如逆水行舟,不进则退 ...

  9. easyui 汇总

    1. easyui datagrid 表格组件列属性 formatter columns:{ { field:' product', title:'商品', align:'center', width ...

  10. 实现简单sed替换功能的python脚本

    #可以用来修改配置文件参数 # -*- coding:utf-8 -*- import os,sys old = sys.argv[1] new = sys.argv[2] file = sys.ar ...