EXT chartpanel 饼状图 拆线图

来源:互联网 发布:java中合法的标识符 编辑:程序博客网 时间:2024/04/29 12:51
ExtJs提供了绘制图表的功能,可以绘制折线图、条形图和饼图。这里是一个从servlet获取数据绘制折线图和饼图的例子。下图是最后的结果: 

 


客户端html代码如下: 
Html代码  收藏代码
  1. <html>  
  2. <head>  
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  4. <title>chart demo</title>  
  5.   
  6. <link rel="stylesheet" type="text/css"  
  7.     href="../ext/resources/css/ext-all.css" />  
  8.   
  9. <script type="text/javascript"  
  10.     src="../ext/adapter/ext/ext-base-debug.js"></script>  
  11. <script type="text/javascript" src="../ext/ext-all-debug.js"></script>  
  12. <script type="text/javascript" src="chart.js"></script>  
  13. </head>  
  14. <body>  
  15.   
  16. <div id="line-chart"></div>  
  17. <div id="pie-chart"></div>  
  18.   
  19. </body>  
  20. </html>  


客户端chart.js代码如下: 
Js代码  收藏代码
  1. Ext.chart.Chart.CHART_URL = '../ext/resources/charts.swf';  
  2.   
  3. Ext.onReady(function() {  
  4.   
  5.             var lineStore = new Ext.data.JsonStore({  
  6.                         autoDestroy : true,  
  7.                         url : '/extapp/ChartServlet',  
  8.                         baseParams : {  
  9.                             'type' : 'line'  
  10.                         },  
  11.                         root : 'data',  
  12.                         fields : ['name''visits''views']  
  13.                     });  
  14.   
  15.             lineStore.load();  
  16.   
  17.             // extra extra simple  
  18.             new Ext.Panel({  
  19.                         title : '线图',  
  20.                         renderTo : 'line-chart',  
  21.                         width : 300,  
  22.                         height : 200,  
  23.                         layout : 'fit',  
  24.   
  25.                         items : {  
  26.                             xtype : 'linechart',  
  27.                             store : lineStore,  
  28.                             xField : 'name',  
  29.                             yField : 'visits',  
  30.                             listeners : {  
  31.                                 itemclick : function(o) {  
  32.                                     var rec = lineStore.getAt(o.index);  
  33.                                     Ext.Msg.alert('Item Selected''You chose '  
  34.                                                     + rec.get('name'));  
  35.                                 }  
  36.                             }  
  37.                         }  
  38.                     });  
  39.   
  40.             var pieStore = new Ext.data.JsonStore({  
  41.                         autoDestroy : true,  
  42.                         url : '/extapp/ChartServlet',  
  43.                         baseParams : {  
  44.                             'type' : 'pie'  
  45.                         },  
  46.                         root : 'data',  
  47.                         fields : ['season''total']  
  48.                     });  
  49.   
  50.             pieStore.load();  
  51.   
  52.             // extra extra simple  
  53.             new Ext.Panel({  
  54.                         title : '饼图',  
  55.                         renderTo : 'pie-chart',  
  56.                         width : 300,  
  57.                         height : 300,  
  58.                         layout : 'fit',  
  59.                         items : {  
  60.                             xtype : 'piechart',  
  61.                             store : pieStore,  
  62.                             dataField : 'total',  
  63.                             categoryField : 'season',  
  64.                             extraStyle : {  
  65.                                 legend : {  
  66.                                     display : 'bottom',  
  67.                                     padding : 5,  
  68.                                     font : {  
  69.                                         family : 'Tahoma',  
  70.                                         size : 13  
  71.                                     }  
  72.                                 }  
  73.                             },  
  74.                             listeners : {  
  75.                                 itemclick : function(o) {  
  76.                                     var rec = pieStore.getAt(o.index);  
  77.                                     Ext.Msg.alert('Item Selected''You chose '  
  78.                                                     + rec.get('season'));  
  79.                                 }  
  80.                             }  
  81.                         }  
  82.                     });  
  83.         });  


其中第一句Ext.chart.Chart.CHART_URL = '../ext/resources/charts.swf';是为了使用当前服务器的文件,如果没有这句话,默认会去adobe的站点取。 

折线图和饼图的数据都是通过JsonStore取得的,可以通过url属性指定提供数据的地址,通过baseParam属性指定参数,其实这两个就是向服务器发送POST命令的url地址和参数。 

折线图和饼图都是通过Panel的items属性定义的。折线图的xtype是linechart,x轴和y轴通过xField,和yField定义。饼图的xtype是piechart,分类通过categoryField定义,数据通过dataField定义。两者都可以通过listeners定义事件响应函数,这里分别定义了鼠标点击事件。 

以下是服务器端的servlet的代码片段: 
Java代码  收藏代码
  1. protected void doPost(HttpServletRequest request,  
  2.         HttpServletResponse response) throws ServletException, IOException {  
  3.     System.out.println("doPost");  
  4.   
  5.     String type = request.getParameter("type");  
  6.     System.out.println("type = " + type);  
  7.   
  8.     PrintWriter out = response.getWriter();  
  9.     if (type.equals("line")) {  
  10.         out.print(lineChartData());  
  11.     } else if (type.equals("pie")) {  
  12.         out.print(pieChartData());  
  13.     }  
  14. }  
  15.   
  16.   
  17. private String lineChartData() {  
  18.     StringBuilder sb = new StringBuilder();  
  19.     sb.append("{");  
  20.     sb.append(" data : [{");  
  21.     sb.append("  name : 'Jul 07',visits : 245000,views : 3000000");  
  22.     sb.append(" },{");  
  23.     sb.append("  name : 'Aug 07',visits : 205000,views : 3000000");  
  24.     sb.append(" },{");  
  25.     sb.append("  name : 'Sep 07',visits : 115000,views : 3000000");  
  26.     sb.append(" },{");  
  27.     sb.append("  name : 'Oct 07',visits : 255000,views : 3000000");  
  28.     sb.append(" },{");  
  29.     sb.append("  name : 'Nov 07',visits : 345000,views : 3000000");  
  30.     sb.append(" },{");  
  31.     sb.append("  name : 'Dec 07',visits : 315000,views : 3000000");  
  32.     sb.append(" }]");  
  33.     sb.append("}");  
  34.       
  35.     return sb.toString();  
  36. }  
  37.   
  38.   
  39. private String pieChartData() {  
  40.     StringBuilder sb = new StringBuilder();  
  41.     sb.append("{");  
  42.     sb.append(" data : [{");  
  43.     sb.append("  season: 'Summer',total: 150");  
  44.     sb.append(" },{");  
  45.     sb.append("  season: 'Fall',total: 245");  
  46.     sb.append(" },{");  
  47.     sb.append("  season: 'Winter',total: 117");  
  48.     sb.append(" },{");  
  49.     sb.append("  season: 'Spring',total: 184");  
  50.     sb.append(" }]");  
  51.     sb.append("}");  
  52.       
  53.     return sb.toString();  
  54. }  


服务器端比较简单,根据参数分别返回折线图和饼图的数据
原创粉丝点击