废话不多说,使用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柱状图和数据表格使用总结的更多相关文章

  1. Jquery EasyUI datagrid后台数据表格生成及分页详解

    由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...

  2. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架

    这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...

  3. echarts-gl 3D柱状图保存为图片,打印

    echarts-gl生成的立体柱状图生成图片是平面的,但是需求是3D图并且可以打印,我们的思路是先转成图片,然后再打印,代码如下: 生成3D图 <td>图表分析</td> &l ...

  4. JQuery Easy Ui dataGrid 数据表格

    数据表格 - DataGrid 英文文档:http://www.jeasyui.com/documentation/index.php# 继承$.fn.panel.defaults,使用$.fn.da ...

  5. 3-Highcharts 3D图之3D柱状图分组叠堆3D图

    <!DOCTYPE> <html lang='en'> <head> <title>3-Highcharts 3D图之3D柱状图分组叠堆3D图</ ...

  6. 2-Highcharts 3D图之3D柱状图带可调试倾斜角度

    <!DOCTYPE> <html lang='en'> <head> <title>2-Highcharts 3D图之3D柱状图带可调试倾斜角度< ...

  7. 1-Highcharts 3D图之普通3D柱状图与带空值

    <!DOCTYPE> <html lang='en'> <head> <title>1-Highcharts 3D图之普通3D柱状图与带空值</t ...

  8. JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单

    JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...

  9. WPF用SkewTransform画3D柱状图

    WPF用SkewTransform画3D柱状图 SkewTransform主要是对控件实现一种2-D扭曲,具体内容可以查看以下链接: http://msdn.microsoft.com/zh-cn/l ...

随机推荐

  1. iOS基础 - UIScrollView

    一.UIScrollView使用引导思路. 1.之前我们所学的显示图片是用UIImageView 2.将UIImageView添加到根视图中,不显示的原因:没有设置位置 3.当图片比屏幕大时,直接放在 ...

  2. 浅谈DevExpress<二>:设计一个完整界面(2)

    下面来把剩下的工作做完,换肤功能昨天已近讨论过,今天就不重复了.首先建立三个全局变量,一个存放文件路径,一个存放数据,一个存放过滤条件. string DBFileName; DataView dat ...

  3. Binder机制,从Java到C (5. IBinder对象传递形式)

    1.IBinder的传递 Binder IPC通信中,Binder是通信的媒介,Parcel是通信的內容.远程调用过程中,其参数都被打包成Parcel的形式來传递.IBinder对象当然也不例外,在前 ...

  4. WinForm媒体播放器

    媒体播放控件(Windows Media Player )的常用属性和方法,并且利用它设计一个简单的媒体应用程序——媒体播放器.该媒体播放器可以播放 wav.avi.mid 和 mp3 等格式的文件. ...

  5. .NET里的行为驱动开发

    BDD (Given - When - then) Ruby Cucumber, Java FitNesse , Python RoboFramework, C# specflow nspec .NE ...

  6. 当Azure里的虚拟机网卡被禁用

    当Azure里的虚拟机网卡被禁用了之后…… 这样的想法来自于一个假设,如果网卡被禁用之后,用户该如何处理,Azure又该如何处理,对于设置在虚拟机中的禁用网卡选项是否还有存在的意义?通常情况下,点选了 ...

  7. IOS基础开发一(ios程序运行过程)

    今天做了一个简单的仿QQ登陆UI晒一晒:

  8. 尽量不用char*作为hash_map的key

    引子: 同事前几天用hash_map时发现一些问题.当时的场景是有一些字符串char*,要去对应某种类型的对象.同事的做法是: 尝试用char*作为key进行hash.编译通过,但运行时不正常,ins ...

  9. 强烈推荐:240多个jQuery插件【转】

    强烈推荐:240多个jQuery插件 概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架.其宗旨是—写更少的代码,做更多的事情.它是轻量级的 js 库(压缩后只 ...

  10. HTTP协议 HttpWebRequest和 Socket的一点总结

    HTTP协议 HttpWebRequest和 Socket的一点总结 相信接触过网络开发的人对HTTP.HttpWebRequest.Socket这些东西都不陌生吧.它们之间的一些介绍和关系我这里都忽 ...