本例演示版为ext-4.2.1
面板(Panel)
ExtJS不但在Web开发中成功引入了丰富的组件,也引入了桌面程序中常用到的面板和布局概念。这些概念的引入在很大程度上改变了传统的Web开发方式。
面板(panel)是ExtJS中一个很重要的概念,它相当于一幅画板,我们可以在它的上面放置需要的各种组件,并使用不同的布局类对组件的摆放位置进行格式化,掌握这些布局类的特点及使用方式是突波ExtJS页面设计的关键。我们可以在面板中随意地排版布局,面板在ExtJS中起着页面骨架的作用,所以学习面板是学习ExtJS页面布局的基础和起点。ExtJS面板共支持10中不同风格的布局样式,并且允许无限制的进行嵌套。
Ext.panel.Panel扩展自Ext.container.Container,它可以应用布局(默认为Auto),也可以作为各种组件的容器,并且可以扩展出功能更加强大的面板。作为标准的面板组件主要包括如下5部分:底部工具栏(buttom toolbars)、顶部工具栏(top toolbars)、面板头部(header)、面板底部(footer)和面板体(body),面板组件还内置了折叠、展开和关闭功能。
Ext.panel.Panel示例
Ext.onReady(function(){ // Ext.panel.Panel示例 标准面板的创建演示 Ext.create('Ext.panel.Panel',{ title:'面板顶部(header)', tbar:['顶部工具栏(top toolbars)'], bbar:['底端工具栏(bottom toolbars)'], height:200, width:300, frame:true, renderTo:Ext.getBody(), bodyPadding:5, bodyStyle:'background-color:#FFFFFF', html:'面板体(body)', tools:[ {id:'toggle'}, {id:'close'}, {id:'maximize'} ], buttons:[{ text:'面板底部(footer)' }] }); });
Ext.onReady(function(){ //P136 Auto(自动布局)示例 Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.Auto布局示例', frame:true,//渲染面板 width:300, renderTo:Ext.getBody(), bodyPadding:5, layout:'auto',//自动布局 defaults:{//设置默认属性 bodyStyle:'backgroud-color:#FFFFFF' //设置面板体的背景色 }, //面板items配置项默认的xtype类型panel, //该默认值可以通过defaultType配置项进行更改 items:[{ title:'嵌套面板一', html:'面板一' },{ title:'嵌套面板二', html:'面板二' }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ layout:'fit', title:'Ext.layout.container.Fit布局示例', frame:true,//渲染面板 height:150, width:250, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF'//设置面板体的背景色 }, //面板items配置项默认的xtype类型为panel //该默认值可以通过defaultType配置项进行更改 items:[{ title:'嵌套面板一', html:'面板一' },{ title:'嵌套面板二', html:'面板二' }] }); });
Ext.onReady(function(){ // Accordion(折叠布局)示例 Ext.create('Ext.panel.Panel',{ layout:'accordion', title:'Ext.layout.container.Accordtion布局示例', frame:true,//渲染面板 height:200, width:250, renderTo:Ext.getBody(), bodyPadding:5, defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板体的背景色 }, items:[{ title:'嵌套面板一', html:'说明一' },{ title:'嵌套面板二', html:'说明二' },{ title:'嵌套面板三', html:'说明三' }] }); });
Ext.onReady(function(){ // Card(卡片式布局)示例 var panel = Ext.create('Ext.panel.Panel',{ layout:'card', activeItem:0,//设置默认显示第一个子面板 title:'Ext.layout.container.CardLayout布局示例', frame:true, height:150, width:250, renderTo:Ext.getBody(), bodyPadding:5, defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF;padding:15px' }, items:[{ title:'嵌套面板一', html:'说明一', id:'p1' },{ title:'嵌套面板二', html:'说明二', id:'p2' },{ title:'嵌套面板三', html:'说明三', id:'p3' }], buttons:[{ text:'上一页', handler:changePage },{ text:'下一页', handler:changePage }] }); //切换子面板 function changePage(btn){ var index = Number(panel.layout.activeItem.id.substring(1)); if(btn.text == '上一页'){ index -= 1; if(index<1){ index = 1; } }else{ index +=1; if(index>3){ index=3; } } panel.layout.setActiveItem('p'+index); } });
Ext.onReady(function(){ //百分比(Percentage)定位示例 Ext.create('Ext.panel.Panel',{ layout:'anchor', title:'Ext.layout.container.Anchor布局示例', frame:false,//渲染面板 height:150, width:300, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板的背景色 }, items:[{ anchor:'50% 50%',//设置子面板的宽高为父面板的50% title:'子面板' }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ layout:'anchor', title:'Ext.layout.container.Anchor布局示例', frame:false,//渲染面板 height:150, width:300, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板的背景色 }, items:[{ anchor:'-10 -10',//设置子面板的宽高偏移父面板10像素 title:'子面板' }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ layout:'anchor', title:'Ext.layout.container.Anchor布局示例', autoScroll:true,//自动显示滚动条 frame:false,//渲染面板 height:150, width:300, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板的背景色 }, items:[{ anchor:'r b',//相对于父容器的右边和底边的差值进行定位 width:200, height:100, title:'子面板' }] }); });Absolute绝对位置布局
Ext.onReady(function(){ //Absolute绝对位置布局示例 Ext.create('Ext.panel.Panel',{ layout:'absolute', title:'Ext.layout.container.Absolute布局示例', frame:false,//渲染面板 height:150, width:300, renderTo:Ext.getBody(), defaults:{//设置默认属性 frame:true, height:70, width:100, bodyStyle:'background-color:#FFFFFF;padding:15px'//设置面板体的背景色 }, items:[{ x:10,//横坐标为距父容器左边缘90像素的位置 y:10,//纵坐标为距父容器上边缘10像素的位置 html:'子面板一', title:'子面板一' },{ x:130,//横坐标为距父容器左边缘130像素的位置 y:40,//纵坐标为距父容器上边缘40像素的位置 html:'子面板二', title:'子面板二' }] }); });CheckboxGroup复选框组布局
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.Column布局示例', layout:'column', frame:true,//渲染面板 height:150, width:250, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF', height:100, frame:true }, items:[{ title:'子面板一', width:100//指定列宽为100像素 },{ title:'子面板二', width:100//指定列宽为100像素 }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.Column布局示例', layout:'column', frame:true,//渲染面板 height:150, width:250, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF', height:100, frame:true }, items:[{ title:'子面板一', columnWidth:.3//指定列宽为容器宽度的30% },{ title:'子面板二', columnWidth:.7//指定列宽为容器宽度的70% }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.Column布局示例', layout:'column', frame:true,//渲染面板 height:150, width:350, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF', height:100, frame:true }, items:[{ title:'子面板一', width:100//指定列宽为100像素 },{ title:'子面板二', columnWidth:.3//指定列宽为容器宽度的70% },{ title:'子面板三', columnWidth:.7//指定列宽为容器宽度的70% }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.Table布局示例', layout:{ type:'table',//表格布局 columns:4//设置表格布局默认列数为4列 }, frame:true,//渲染面板 height:250, width:450, renderTo:Ext.getBody(), defaults:{//设置默认属性 bodyStyle:'background-color:#FFFFFF;',//设置面板体的背景色 frame:true, width:70, height:70 }, items:[{ title:'子面板一', width:210, colspan:3 //设置跨列 },{ title:'子面板二', rowspan:2, height:140 }, {title:'子面板三'}, {title:'子面板四'}, {title:'子面板五'}] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.Border布局示例', layout:'border',//边框布局 height:250, width:400, frame:true, renderTo:Ext.getBody(), defaults:{//设置默认属性 collapsible:true }, items:[{ title:'north Panel', html:'上边', region:'north',//指定子面板所在区域为north height:50 },{ title:'south Panel', html:'下边', region:'south',//指定子面板所在区域为south height:50 },{ title:'west Panel', html:'左边', region:'west',//指定子面板所在区域为west width:100 },{ title:'east Panel', html:'右边', region:'east',//指定子面板所在区域为east width:100 },{ title:'main Content', html:'中间', region:'center'//指定子面板所在区域为center }] }); });
Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ title:'Ext.layout.container.HBox布局示例', layout:{ type:'hbox',//水平盒布局 align:'stretch'//子面板高度充满父容器 }, height:150, width:300, frame:true, renderTo:Ext.getBody(), items:[{ title:'子面板一', flex:1, html:'1/4宽(flex=1)' },{ title:'子面板二', flex:1, html:'1/4宽(flex=1)' },{ title:'子面板三', flex:2, html:'1/2宽(flex=2)' }] }) });
Ext.onReady(function(){ Ext.create('Ext.container.Viewport',{ layout:'border',//表格布局 items:[{ title:'North Panel', html:'上边', region:'north',//指定子面板所在区域为north height:100 },{ title:'West Panel', html:'左边', region:'west',//指定子面板所在区域为west width:150 },{ title:'Main Panel', html:'中间', region:'center'//指定子面板所在区域为center }] }); });