`
xiejin2008
  • 浏览: 125438 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext3.0 动态数据 Chart 初探

阅读更多

学习了Ext的Chart,看了官方提供的Example,也搜索了些资料。整理出了一份Ext Chart定时动态获取后台的Json数据的Demo。

参考的不错的文章有:

第一篇文章:http://atian25.iteye.com/blog/413947

这个有用的:关于Chart的一些样式和具体配置的用法参数:http://developer.yahoo.com/yui/charts/

Yahoo:  http://developer.yahoo.com/flash/astra-flash/

http://www.hmgis.cn/post/366.html

发现ExtJs Chart的一个Bug:            http://blog.csdn.net/acsu/archive/2009/11/26/4881834.aspx

如何自定义 ExtJS.chart.PieChart 各分块的颜色

http://www.cnblogs.com/beginor/archive/2009/11/22/1608034.html

 

 

Demo整体思路:

Servlert将List封装了JavaBean对象,JavaBean对象中的属性数据随机产生,然后通过Json-lib将List转换成json格式字符串,并且打印。

然后页面Js通过Ext.data.JsonReader ,Ext.data.Store 读取返回的json格式数据。

 

工程目录图:

 

 

Src目录:DataBean.java ,一个简单的JavaBean类。

            DataServert.java 一个产生数据的Servlet 类(返回Json格式数据)。

 

 

WebRoot目录:chart 中,charts.js  关键的js代码。

                        extjs目录, ext中通用的js,css,swf等资源文件。

 

效果图片:

 

 

关键代码:

javaBean:

package com.bean;

import java.io.Serializable;

public class DataBean implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    private String            name             = "";
    private int               visits           = 0;
    private int               views            = 0;
    
    public DataBean (String name, int visits, int views) {
        this.name = name;
        this.views = views;
        this.visits = visits;
    }
    
    public DataBean(){}
    
    public String getName () {
        return name;
    }
    
    public void setName ( String name ) {
        this.name = name;
    }
    
    public int getVisits () {
        return visits;
    }
    
    public void setVisits ( int visits ) {
        this.visits = visits;
    }
    
    public int getViews () {
        return views;
    }
    
    public void setViews ( int views ) {
        this.views = views;
    }
}

 

DataServert:

package com.bean;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

public class DataServert extends HttpServlet {
    
    /**
    	 * Constructor of the object.
    	 */
    public DataServert () {
        super ();
    }
    
    /**
    	 * Destruction of the servlet. <br>
    	 */
    public void destroy () {
        super.destroy (); // Just puts "destroy" string in log
        // Put your code here
    }
    
    /**
    	 * The doGet method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to get.
    	 * 
    	 * @param request the request send by the client to the server
    	 * @param response the response send by the server to the client
    	 * @throws ServletException if an error occurred
    	 * @throws IOException if an error occurred
    	 */
    public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        response.setContentType ( "text/html;charset=utf-8" );
        request.setCharacterEncoding ( "utf-8" );
        PrintWriter out = response.getWriter ();
        String jsonString = "";
        List<DataBean> list = new ArrayList<DataBean> ();
        String[] names = { "1G", "2G", "3G", "4G", "5G", "6G", "7G", "8G" };
        Random random = new Random ();
        for (int i = 0; i < names.length; i++) {
            int num = random.nextInt ( 100 ) * 100;
            DataBean data = new DataBean ( names[i], num, num / 2 );
            list.add ( data );
        }
        JSONArray arryData = null;
        arryData = JSONArray.fromObject ( list );
        jsonString = "{totalCount:" + list.size () + ",data:" + arryData.toString ().replaceAll ( "\n", "" ) + "}";
        System.out.println (jsonString); 
        out.print ( jsonString ); 
        out.flush ();
        out.close ();
    }
    
    /**
    	 * The doPost method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to post.
    	 * 
    	 * @param request the request send by the client to the server
    	 * @param response the response send by the server to the client
    	 * @throws ServletException if an error occurred
    	 * @throws IOException if an error occurred
    	 */
    public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
            IOException {
        doGet ( request, response );
        
    }
    
    /**
    	 * Initialization of the servlet. <br>
    	 *
    	 * @throws ServletException if an error occurs
    	 */
    public void init () throws ServletException {
        // Put your code here
    }
    
}

 

charts.js

 

Ext.chart.Chart.CHART_URL = '../extjs/resources/charts.swf'; // 模板flash
var json_store;
Ext.onReady(function() {
			var json_reader = new Ext.data.JsonReader({
						idProperty : "name",
			root : 'data',
			totalProperty : "totalCount",
			fields : [{
						name : 'name',
						type : "string"
					}, {
						name : 'views',
						type : "int"
					}, {
						name : 'visits',
						type : "int"
					}]
		});

json_store = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						url : '../DataServert.do',
						method : 'POST'
					}),
			reader : json_reader
		});

// extra extra simple
new Ext.Panel({
			title : 'ExtJS.com Visits Trend, 2007/2008 ',
			renderTo : 'container',
			width : 500,
			height : 300,
			layout : 'fit',

			items : {
				xtype : 'linechart', // 类型
				store : json_store,
				xField : 'name', // X轴取值
				yField : 'visits', // Y轴取值
				listeners : {
					itemclick : function(o) {// 点击事件.
						var rec = store.getAt(o.index);
						Ext.example.msg('被选中项:', '你选择了 {0}.', rec
										.get('name'));
					}
				},
				series : [{
							type : 'line', // line
							displayName : '点击数',
							yField : 'visits',
							style : {
								color : '#6666CC'
							}
						}]
			}
		});

// extra simple
new Ext.Panel({
			iconCls : 'chart',
			title : 'ExtJS.com Visits Trend, 2007/2008 (简单样式)',
			frame : true,
			renderTo : 'container',
			width : 500,
			height : 300,
			layout : 'fit',

			items : {
				xtype : 'columnchart',
				store : json_store,
				url : '../extjs/resources/charts.swf',
				xField : 'name',
				yField : 'visits',
				yAxis : new Ext.chart.NumericAxis({
							displayName : 'Visits',
							labelRenderer : Ext.util.Format
									.numberRenderer('0,0')
						}),
				tipRenderer : function(chart, record) {
					return Ext.util.Format.number(
							record.data.visits, '0,0')
							+ ' visits in ' + record.data.name;
				},
				chartStyle : {
					animationEnabled : true,// 是否支持动态数据变化
					legend : {// 图例
						display : "bottom",
						spacing : 2,
						padding : 5,
						font : {
							name : 'Tahoma',
							color : '#3366FF',
							size : 12,
							bold : true
						}
					}
				},
				series : [{
							type : 'column', // line
							displayName : '点击数',
							yField : 'visits',
							style : {
								color : '#3366FF'
							}
						}]
			}
		});

// more complex with a custom look
new Ext.Panel({
			iconCls : 'chart',// 样式
			title : 'ExtJS.com Visits and Pageviews, 2007/2008  (复杂样式)',
			frame : true,
			renderTo : 'container',
			width : 500,
			height : 300,
			layout : 'fit',

			items : {
				xtype : 'columnchart',// 柱状图
				store : json_store,
				url : '../extjs/resources/charts.swf',
				xField : 'name',// X轴显示的值
				yAxis : new Ext.chart.NumericAxis({
							displayName : 'Visits',
							labelRenderer : Ext.util.Format
									.numberRenderer('0,0')
						}), // Y 轴显示的值
				tipRenderer : function(chart, record, index, series) {// tip渲染
					if (series.yField == 'visits') {
						return Ext.util.Format.number(
								record.data.visits, '0,0')
								+ ' visits in ' + record.data.name;
					} else {
						return Ext.util.Format.number(
								record.data.views, '0,0')
								+ ' page views in '
								+ record.data.name;
					}
				},
				chartStyle : {
					padding : 10,
					animationEnabled : true,// 是否支持动态数据变化
					font : {// 图表整体字体
						name : 'Tahoma',
						color : 'silver',
						size : 11
					},
					border : {
                    // color:'#3399FF',
					// size:1
					},
					background : {
						color : '#CCCCCC',// 背景颜色
						alpha : 0.1
						// 透明度
						// image:
						// mode:stretch
					},
					legend : {// 图例
						display : "bottom",
						spacing : 2,
						padding : 5,
						font : {
							name : 'Tahoma',
							color : '#3366FF',
							size : 12,
							bold : true
						}
					},
					dataTip : { // 鼠标经过,数据提示样式
						padding : 5,// 提示内容与边框的距离
						border : {
							color : "#FF3333",
							size : 1
						},
						background : {
							color : 0xDAE7F6,// 背景颜色透明度
							alpha : .8
							// 背景颜色透明度
						},
						font : {
							name : 'Tahoma',
							color : '#FF3300',
							size : 10,
							bold : true
						}
					},
					xAxis : { // X 轴
						color : 0x69aBc8, // X轴颜色
						majorTicks : {// 大刻度值
							color : 0x69aBc8,
							length : 4
						},
						minorTicks : {// 小刻度值
							color : 0x69aBc8,
							length : 2
						},
						majorGridLines : {
							size : 1,
							color : '#999999'
						},
						// showLabels:false,
						labelDistance : 4
					},
					yAxis : {
						color : 0x69aBc8,
						majorTicks : {// 大刻度值
							color : 0x69aBc8,
							length : 4
						},
						minorTicks : {// 小刻度值
							color : 0x69aBc8,
							length : 2
						},
						majorGridLines : {
							size : 1,
							color : '#999999'
						}
					}
				},
				series : [{
							type : 'column',// 柱状图
							displayName : '浏览数',
							yField : 'views',
							style : {
								// image : 'bar.gif',
								// mode : 'stretch',
								color : '#66CCFF'
							}
						}, {
							type : 'column', // line
							displayName : '点击数',
							yField : 'visits',
							style : {
								color : '#FF3300'
								// lineAlpha:0.5,
								// lineColor:'#FF3300',
								// alpha:0.8,
								// size:10
							}
						}]
			}
		});

// a new example
new Ext.Panel({
			width : 500,
			height : 300,
			renderTo : 'container',
			title : 'Stacked Bar Chart',
			items : {
				xtype : 'stackedbarchart',// 图表类型
				store : json_store,
				yField : 'name',
				xAxis : new Ext.chart.NumericAxis({
					stackingEnabled : true,
					labelRenderer : Ext.util.Format.usMoney
						// 格式化渲染
					}),
				chartStyle : {
					legend : {// 图例
						display : "top",
						spacing : 2,
						padding : 5,
						font : {
							name : 'Tahoma',
							color : '#3366FF',
							size : 12,
							bold : true
						}
					},
					dataTip : { // 鼠标经过,数据提示样式
						padding : 5,// 提示内容与边框的距离
						border : {
							color : "#FF3333",
							size : 1
						},
						background : {
							color : 0xDAE7F6,// 背景颜色透明度
							alpha : .8
							// 背景颜色透明度
						},
						font : {
							name : 'Tahoma',
							color : '#FF3300',
							size : 10,
							bold : true
						}
					}
				},
				series : [{
							xField : 'views',
							displayName : '访问量'
						}, {
							xField : 'visits',
							displayName : '点击量'
						}]
			}
		});

// a Pie Chart example
new Ext.Panel({
			width : 400,
			height : 400,
			title : 'Pie Chart with Legend',
			renderTo : 'container',
			items : {
				store : json_store,
				xtype : 'piechart',// 餅圖
				dataField : 'views',// 数据
				categoryField : 'name',// 项目
				// extra styles get applied to the chart defaults
				extraStyle : {
					legend : // 图例
					{
						display : 'bottom',
						padding : 5,
						font : {
							family : 'Tahoma',
										size : 13
									}
								}
							}
						}
					});

			loadData();
		});
function loadData() {
	json_store.reload();
	setTimeout('loadData();', 1000);
}

 

Charts.jsp

 

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath ();
    String basePath = request.getScheme () + "://" + request.getServerName () + ":" + request.getServerPort ()
            + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>  
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Charts</title>
		<link rel="stylesheet" type="text/css"
			href="../extjs/resources/css/ext-all.css" />

		<!-- GC -->
		<!-- LIBS -->
		<script type="text/javascript" src="../extjs/adapter/ext/ext-base.js"></script>
		<!-- ENDLIBS -->

		<script type="text/javascript" src="../extjs/ext-all.js"></script>

		<script type="text/javascript" src="charts.js"></script>

		<!-- Common Styles for the examples -->
		<link rel="stylesheet" type="text/css"
			href="../extjs/shared/examples.css" />

		<style type="text/css">
#container {
	padding: 10px;
}

#container .x-panel {
	margin: 10px;
}

#container .x-panel-ml {
	padding-left: 1px;
}

#container .x-panel-mr {
	padding-right: 1px;
}

#container .x-panel-bl {
	padding-left: 2px;
}

#container .x-panel-br {
	padding-right: 2px;
}

#container .x-panel-body {
	
}

#container .x-panel-mc {
	padding-top: 0;
}

#container .x-panel-bc .x-panel-footer {
	padding-bottom: 2px;
}

#container .x-panel-nofooter .x-panel-bc {
	height: 2px;
}

#container .x-toolbar {
	border: 1px solid #99BBE8;
	border-width: 0 0 1px 0;
}

.chart {
	background-image: url(chart.gif) !important;
}
</style>
	</head>
	<body>
		<script type="text/javascript" src="../extjs/shared/examples.js"></script>
		<!-- EXAMPLES -->
		<h1>
			Charts
		</h1>
		

		<div id="container">

		</div>

	</body>
</html>

 

下面附上源码:

 

13
0
分享到:
评论
9 楼 wang1248912822 2013-08-07  
[size=large][/size] [b]        [/b]
8 楼 fushun_test 2012-11-30  
很不错,柱状的每个珠子颜色和饼状的每个部分的颜色可以自定义吗
7 楼 yaniel8931 2012-08-01  
请教下,如果想让X轴上的文字,斜着显示如何设置?急
6 楼 ycwycf1 2012-07-25  
5 楼 guoyuan 2011-11-23  
4 楼 xiejin2008 2011-11-01  
zxm94w 写道
楼主你好,谢谢你的Demo,学习很多。
想问几个问题:
1、如何将X轴定义为时间轴?
2、如果我的X轴是时间轴,如何将后台传得数据(比如时间是个字符串格式的)格式化成YYYY-MM-DD的格式


谢谢!
呵呵,我还得研究研究,好久没用它了。
3 楼 zxm94w 2011-10-25  
楼主你好,谢谢你的Demo,学习很多。
想问几个问题:
1、如何将X轴定义为时间轴?
2、如果我的X轴是时间轴,如何将后台传得数据(比如时间是个字符串格式的)格式化成YYYY-MM-DD的格式


谢谢!
2 楼 xiejin2008 2010-09-24  
可以的.下次帮你实验一下
1 楼 highbbs 2010-09-15  
问个问题,对于柱状图,每根柱子的颜色可以动态定义吗?

相关推荐

    EXT3.0中文API文档

    7. **工具和辅助函数**:EXT3.0还提供了一些实用工具类和辅助函数,如Ext.util.CSS用于处理CSS样式,Ext.DomHelper用于动态创建DOM元素,以及Ext.Date用于日期时间操作等。 在阅读EXT3.0中文API文档时,开发者应该...

    ext3.0+Spket自动提示

    2. **数据绑定**:EXT3.0支持数据绑定,能够将数据模型与界面组件直接关联,实现数据的实时更新和同步。 3. **布局管理**:提供了多种布局方式,如绝对布局、流式布局、表格布局等,方便开发者构建复杂的页面结构。...

    ext3.0所有控件演示代码

    EXT3.0还支持自定义图标和动态加载。 5. 演示代码的运行:压缩包中的`demo`文件夹很可能包含了所有示例的HTML和JavaScript代码,可以直接在浏览器中运行。这有助于开发者直观地理解EXT3.0控件的使用方式,快速上手...

    Ext3.0使用示例

    1. **日志式文件系统**:Ext3.0的核心特点是采用了日志记录的方式,这使得系统在崩溃或意外断电后能够快速恢复到一致状态,避免数据丢失。 2. **高性能**:通过优化的数据结构和算法,Ext3.0在读写速度上表现出色,...

    Ext 3.0 中文文档

    Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档Ext 3.0 中文文档

    ext 3.0中文API

    在EXT 3.0中文文档.CHM文件中,开发者可以找到关于EXT组件、布局、数据绑定、AJAX通信、事件处理等方面的详细信息。这个CHM文件通常包含一个索引和搜索功能,使得查找特定API或概念变得更加便捷。通过深入学习和理解...

    最新ext3.0资源包 ext3.0

    EXT3.0 alpha 版本可能是指EXT3的一个早期开发版本,通常alpha版本是软件开发过程中的第一个公开测试版本,可能存在较多bug和不稳定因素。而EXT2.21可能是EXT2文件系统的某个更新版本,EXT2是EXT3的前身,不包含日志...

    Ext 3.0源码+典型实例

    在 Ext 3.0 中,可以使用 GridPanel 显示数据,结合 Store 和 Proxy 实现数据的加载和筛选。同时,可以添加过滤器(Filter)或使用远程排序(remoteSort)来处理查询逻辑。 4. **动态树形菜单**:动态树形菜单是...

    EXT3.0 登录实例

    4. **事件监听与处理**:EXT3.0使用事件驱动模型,登录按钮的点击事件通常会触发一个函数,该函数负责收集表单数据,可能还会进行简单的客户端验证,然后使用Ajax技术向服务器发送POST请求。 5. **Ajax通信**:EXT...

    Ext3.0 中文帮助手册

    Ext3.0中文帮助手册是针对Ext JavaScript库的详尽指南,主要面向开发者,提供了关于Ext 3.0版本的API文档。这个手册是开发基于Web的富客户端应用的重要参考资料,因为Ext是一个强大的用户界面框架,它允许创建复杂的...

    Ext3.0 + 中文API

    Ext3.0是一款广泛应用于Web开发的JavaScript库,主要用于构建富客户端应用程序,特别是与数据管理、用户界面组件和Ajax交互相关的应用。它以其强大的功能、灵活性和高效的性能而备受推崇。"中文API"指的是该库的中文...

    Ext3.0和API文档

    Ext3.0是Ext JS框架的一个重要版本,它在Web应用程序开发中提供了强大的用户界面组件和数据管理功能。此版本的发布RC1(Release Candidate 1)意味着它已接近最终稳定版,开发者可以开始测试并为正式版做好准备。API...

    Ext 3.0 中文文档.zip

    这份"Ext3.0中文文档"提供了全面的指南,帮助开发者深入理解并有效利用这个框架。 一、Store:在Ext 3.0中,Store是数据管理的核心。它负责存储和管理数据,与各种UI组件(如Grids和Trees)进行交互。Store可以连接...

    ext 3.0 中文API

    4. **Tree**:EXT的树形组件用于展示层次结构的数据,支持动态加载、拖放操作和节点的展开/折叠。 5. **Tab Panel**:通过Tab Panel,可以创建带有多个标签页的应用界面,每个标签页可以包含不同的组件或面板。 6....

    Ext 3.0 - 中文API文档

    5. **表单处理**:Ext 3.0提供了强大的表单组件和数据验证机制,可以方便地创建和管理复杂的表单。 6. **树形结构**:TreePanel组件允许展示和操作层级数据,常用于文件系统或组织结构的展示。 7. **数据存储**:...

    Ext 3.0 中文手册和实用教程.pdf

    2. **数据绑定**:Ext 3.0引入了强大的数据绑定功能,使得UI组件能够实时反映数据源的变化。这通过Model、Store和View之间的联动实现,减少了代码量,提高了代码的可维护性。 3. **布局管理**:Ext 3.0 提供了多种...

    ext 3.0源码+帮助文档chm

    在深入学习EXT 3.0源码时,建议先从核心类开始,例如Ext.Element(基础DOM操作)、Ext.Panel(基本组件)和Ext.data.Store(数据管理)。了解这些基础类的用法和实现原理后,再逐步探索更复杂的组件和功能,如Grid、...

    官方Ext3.0实例包

    2. 强大的数据绑定:通过Data Package,Ext3.0支持与后台数据的双向绑定,能够轻松实现数据的实时更新和同步。 3. 动态加载:支持按需加载组件和数据,优化页面性能,减少初始加载时间。 4. 完善的布局管理:提供...

Global site tag (gtag.js) - Google Analytics