extjs+amcharts生成3D柱状图和数据表格使用总结
废话不多说,使用extjs+amcharts创建3d柱状图和数据表实例,如下:
1.首先定义一个数据模型
Ext.define("cacheHijack", {
extend : 'Ext.data.Model',
fields : [ {
name : 'id',
type : 'double'
}, {
name : 'site',
type : 'string'
}, {
name : 'domain',
type : 'string'
}, {
name : 'date',
type : 'string'
}, {
name : 'ip',
type : 'string'
}, {
name : 'areaIsp',
type : 'string'
}, {
name : 'hot_num',
type : 'double'
}, {
name : 'hijack_rate',
type : 'float'
} ]
});
2.创建一个store,extjs中的数据来源,这里作为ext和amcharts用到的共同的数据源。
var itemsPerPage = 20; //用于显示每一页的记录
var store = Ext.create("Ext.data.Store", {
model : 'cacheHijack',
remoteSort : false,
pageSize : itemsPerPage,
autoLoad: true,
proxy : {
type : 'ajax',
url : '/netmonitor/resource/cacheHijackedManager', //这个地方是远程请求的地址,返回的是json类型的数据
method : 'POST',
timeout : 600000,
reader : {
type : 'json',
root : 'items',
totalProperty : 'total'
}
}
});
3.ext远程数据加载后的操作,这边操作主要是将store里的数据进行转化,转化成json对象数组的形式用于amcharts的3d图的数据源。
解释:因为下面amcharts的3d柱状图需要store里的domain,hijack_rate以后额外定义的color数据,所以这个地方我便获取出来,
组合成 jsontext = [{domain:xxx1,hijack_rate:xxx1,color:#oD8ECF},{domain:xxx2,hijack_rate:xxx2,color:#oD8ECF}, {domain:xxx3,hijack_rate:xxx3,color:#oD8ECF},......],然后通过Ext.decode将其转化成标准的json对象
数组,通过create3dChart这个方法传递给amcharts创建的3d 柱状图。接着往下看。。。
store.on('load', function(records, options, success){
var jsontext = "[";
for (var i = 0; i < store.getCount(); i++) {
var record = store.getAt(i);
var domain = record.get('domain');
var hijack_rate = record.get('hijack_rate');
jsontext += "{";
jsontext += "domain:\""+ domain + "\",hijack_rate:"+ hijack_rate +",color:\"#0D8ECF\"},";
}
jsontext = jsontext.substring(0, jsontext.length-1)+"]";
var jsonO = Ext.decode(jsontext);
create3dChart(jsonO);
});
4.以上都属于先准备好数据,下面就是创建显示的面板了,首先,我先创建一个ext数据表格面板,
var gridPanel = Ext.create('Ext.grid.Panel', {
id : 'cacheHijack-dataPanel',
border : false,
flex: 7,
store : store,
// 表格中间展示数据
columns : [ {
text : '序号',
dataIndex : 'id',
width : 60
}, {
text : '网站',
dataIndex : 'site',
width : 130
}, {
text : '域名',
dataIndex : 'domain',
width : 180
}, {
text : '日期',
dataIndex : 'date',
width : 140
}, {
text : '服务器IP',
dataIndex : 'ip',
width : 190
}, {
text : '资源归属地',
dataIndex : 'areaIsp',
width : 200
}, {
text : '热度数量',
dataIndex : 'hot_num',
width : 150
}, {
text : '劫持率',
dataIndex : 'hijack_rate',
width : 150,
renderer:DomUrl
}],
listeners: {
itemclick: function (me, record, item, index, e, eOpts) {
//双击事件的操作
var domain = record.data['domain'];
var site = record.data['site'];
var date = record.data['date'];
createUniqWin(domain,site,date);
}
}
});
实现的效果是这个样子
然后是一个创建3d柱状图的方法
function create3dChart(options) {
var chart = new AmCharts.AmSerialChart();
chart.autoMarginOffset = 0;
chart.dataProvider = options;
chart.categoryField = "domain";
chart.startDuration = 1;
// chart.fontSize = 3;
chart.angle = 30;
chart.depth3D = 15; // AXES
// category
var categoryAxis = chart.categoryAxis;
categoryAxis.labelRotation = 15; // this line makes category values to be rotated
categoryAxis.gridAlpha = 0;
categoryAxis.fillAlpha = 1;
categoryAxis.fillColor = "#FAFAFA";
categoryAxis.gridPosition = "start"; // value
var valueAxis = new AmCharts.ValueAxis();
valueAxis.dashLength = 5;
valueAxis.title = "劫持率";
valueAxis.minimum = 0;
valueAxis.maximum = 100;
valueAxis.axisAlpha = 0;
valueAxis.unit = "%";
chart.addValueAxis(valueAxis); // GRAPH
var graph = new AmCharts.AmGraph();
graph.valueField = "hijack_rate";
graph.colorField = "color";
graph.balloonText = "[[category]]: [[value]]" + "%";
graph.type = "column";
graph.lineAlpha = 0;
graph.fillAlphas = 1;
graph.bulletSize = 10;
chart.addGraph(graph); // WRITE
chart.write("chart3dDiv"); //这个地方的"chart3dDiv"是一个div的id,这个div在总面板上,下面即将看到
}
5.下面这个是组合两者的总面板,请看代码:
var resultsPanel = Ext.create('Ext.panel.Panel', {
title: '白名单劫持率',
frame: true,
width: getPanelWidth(),
height: getPanelHeight(),
layout: {
type: 'vbox',
align: 'stretch'
},
items: [{
xtype: 'container',
layout: {
type: 'hbox',
align: 'stretch'
},
flex: 3,
html: '<div id="chart3dDiv" style="width:' + getPanelWidth() + ' px;height:235px;"></div>' //这个地方就是用于放置3d图的div
},{
xtype: 'container',
layout: {type: 'hbox', align: 'stretch'},
flex: 3,
items: [gridPanel,{
xtype: 'form',
layout: {
type: 'vbox',
align:'stretch'
}
}]
}],
dockedItems : [ {
xtype : 'pagingtoolbar',
pageSize : itemsPerPage,
store : store,
dock : 'bottom',
displayInfo : true,
displayMsg : '显示{0}-{1}条,共计{2}条',
emptyMsg : '没有数据',
beforePageText : '当前页',
afterPageText : '共{0}页'
} ],
renderTo: 'main' + typeId
});
6.最终实现的效果是下满这个样子:
7.还有就是后台获取数据部分的代码
public void cacheHijackedManager(HttpServletRequest req, HttpServletResponse resp) throws Exception
{
resp.setContentType("text/json; charset=utf-8");
String start = req.getParameter("start"); //起始条
String limit = req.getParameter("limit"); int total = getTotalAmount(); Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String sql = "SELECT * FROM w_cache_hijack_day limit " + start + "," + limit;
try {
conn = new DBManager().DataManagerConn(Conf.customerID,Conf.NETRESOURCE);
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
JSONArray ret = new JSONArray();
while (rs.next()) {
JSONObject cacheHijack = new JSONObject();
cacheHijack.put("id", rs.getDouble(1));
cacheHijack.put("site", rs.getString(3));
cacheHijack.put("domain", rs.getString(4));
cacheHijack.put("date", rs.getDate(2).toString());
cacheHijack.put("ip", rs.getString(5));
cacheHijack.put("areaIsp", rs.getString(6));
cacheHijack.put("hot_num", rs.getDouble(7));
cacheHijack.put("hijack_rate", rs.getFloat(8) + "%"); ret.add(cacheHijack);
}
resp.getWriter().print("{\"success\":\"true\",\"items\":" + ret + ",\"total\":\"" + total + "\"}");
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(rs!=null) rs.close();
if(pst!=null) pst.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 统计总数,用于分页
* @param domain
* @param date
* @return
*/
public int getTotalAmount() {
int totalPages = 0;// 默认值为0
String sql = "SELECT count(*) FROM w_cache_hijack_day"; Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
conn = new DBManager().DataManagerConn(Conf.customerID,Conf.NETRESOURCE);
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
if (rs.next()) {
totalPages = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs!=null) rs.close();
if(pstm!=null) pstm.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return totalPages;
}
记录可能略粗略,以备遗忘。
extjs+amcharts生成3D柱状图和数据表格使用总结的更多相关文章
- Jquery EasyUI datagrid后台数据表格生成及分页详解
由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...
- echarts-gl 3D柱状图保存为图片,打印
echarts-gl生成的立体柱状图生成图片是平面的,但是需求是3D图并且可以打印,我们的思路是先转成图片,然后再打印,代码如下: 生成3D图 <td>图表分析</td> &l ...
- JQuery Easy Ui dataGrid 数据表格
数据表格 - DataGrid 英文文档:http://www.jeasyui.com/documentation/index.php# 继承$.fn.panel.defaults,使用$.fn.da ...
- 3-Highcharts 3D图之3D柱状图分组叠堆3D图
<!DOCTYPE> <html lang='en'> <head> <title>3-Highcharts 3D图之3D柱状图分组叠堆3D图</ ...
- 2-Highcharts 3D图之3D柱状图带可调试倾斜角度
<!DOCTYPE> <html lang='en'> <head> <title>2-Highcharts 3D图之3D柱状图带可调试倾斜角度< ...
- 1-Highcharts 3D图之普通3D柱状图与带空值
<!DOCTYPE> <html lang='en'> <head> <title>1-Highcharts 3D图之普通3D柱状图与带空值</t ...
- JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单
JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...
- WPF用SkewTransform画3D柱状图
WPF用SkewTransform画3D柱状图 SkewTransform主要是对控件实现一种2-D扭曲,具体内容可以查看以下链接: http://msdn.microsoft.com/zh-cn/l ...
随机推荐
- formValidator
formValidator输入验证.异步验证实例 + licenseImage验证码插件实例应用 实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能 ...
- C/C++基础知识总结——多态性
1. 多态性的概述 1.1 多态是指同样的消息被不同类型的对象接收时导致不同的行为.所谓消息是指对垒的成员函数的调用,不同行为是指不同的实现. 1.2 多态的实现 (1) 实现角度讲多态可分为两类:编 ...
- 将JDBC ResultSet结果集转成List
private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ...
- JavaScript原生对象拓展
JavaScript原生对象拓展 在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏 ...
- IceMx.Mvc 我的js MVC 框架七、完善植物大战僵尸(增加阳光的消费和获得)
话不多说,先上图 这次增加了阳光的消费和获得,增加了阳光的点击动画 重新排布了布局 有兴趣的话就研究下吧. 上一篇有朋友说让我把项目放到github上面维护,本人没用过这个,肯请朋友们帮小弟科普一下放 ...
- nginx-push-stream模块源码学习(三)——发布
一.概述 发布:发布者将MSG post到某一特定通道上,channel将信息缓存 在说明发布流程之前有必要说明下channel和msg的数据结构. 二.数据结构 2.1 MSG 发布 ...
- json-smart 使用示例
json-smart 使用示例 json是一种通用的数据格式.相比与protocal buffer.thrift等数据格式,json具有可读性强(文本).天生具备良好的扩展性(随意增减字段)等优良特点 ...
- 还原数据时出现的“FILESTREAM功能被禁用”问题
解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题 解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题 今天由于测试需要,在网上下载了Adven ...
- U盘读不出+卷标丢失+像读卡器+大小0+无媒体
U盘读不出+卷标丢失+像读卡器+大小0+无媒体 标题有点怪,原因是我不都不知道该怎样概括这个鸟问题,所以尽可能列出一些主要现象,希望有需要的童鞋搜到.但比标题更怪的是问题本身,且听我道来: 陪伴我若干 ...
- 三种不同实现初始化和销毁bean之前进行的操作的比较
Spring容器中的bean是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种: 通过实现 InitializingBean/ ...