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 ...
随机推荐
- Binder机制,从Java到C (8. ServiceManager in Native)
在第三篇 Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java.实际上,还要 ...
- AngularJS1
Ⅰ.AngularJS的点点滴滴--引导 AngularJS已经被很多人像炒冷饭一样炒过啦,大部分都是直接复制官方文档没有说明一些注意事项,不过什么都要从头开始吧 ###页面引导实例化 * * * ...
- Competitive
- Code First 启用迁移时出错 HRESULT:0x80131040
问题:Enable-Migrations 使用“8”个参数调用“CreateInstanceFrom”时发生异常 (异常来自 HRESULT:0x80131040) PM> Enable-Mig ...
- [原]逆向iOS SDK -- +[UIImage imageNamed:] 的实现
汇编代码: ; Dump of assembler code for function +[UIImage imageNamed:] ; R0 = UIImage, R1 = "imageN ...
- HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象
HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...
- ios开发屏幕问题
1. 程序要要支持Iphone 和 ipad,所以首先必需创建一通用程序,这一操作只要在创建程序时在 devices那栏上勾选universal即可,完成后会发现有两个.xib文件,但只有一个view ...
- 《.NET 编程结构》专题汇总
<.NET 编程结构>专题汇总 前言 掌握一门技术,首要的是掌握其基础. 笔者从事.NET相关开发多年,也非常喜欢.NET,多年来也积累了很多相关的资料,在此将一些基础性的 ...
- Web缓存解决方案
缓存是构建于HTTP统一接口之上的最有用功能之一.可以利用缓存减少终端用户感知到的延时,增加可靠性,减少带宽使用和成本,降低服务器负载.缓存无处不在,可以在服务器网络里,内容分发网络(Content ...
- Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。
在上一篇文章中我们成功得到了重新组织后的数据,接下来需要做的便是将数据插入到数据库中了.在与数据库打交道的过程中有一些方法是普遍的,我们将这些通用方法封装到一个DbUtil类中,以便复用,封装好的Db ...