ExtJs常用布局--layout详解(含实例)

序言:

笔者用的ExtJs版本:ext-3.2.0

ExtJs常见的布局方式有:border、form、absolute、column、accordion、table、fit、card、anchor

另外,不常见的布局有:tab、vbox、hbox

本文所有实例代码已提供下载,下载链接:ExtJs常用布局--layout详解实例代码

简介:

最常用的边框布局——BorderLayout

最简单的布局——FitLayout

制作伸缩菜单的布局——Accordion

实现操作向导的布局——CardLayout

控制位置和大小的布局——AbsoluteLayout

表单专用的布局——FormLayout

分列布局——ColumnLayout

表格状布局——TabelLayout

BoxLayout——HBox

BoxLayout——VBox

一、border 布局

简介:也称“边界布局”、“方位布局”。该布局把容器分为东、南、西、北、中五个区域,分别由east、south、west、north、center表示。我们需要在items中使用region参数来给它定位。

注意:north和south部分只能设置高度(height),west和east部分只能设置宽度(width)。center区域必须有,且它的大小是在其他4个部分设置好以后自动计算出来的,所以不能为它指定宽度值或高度值。

js代码:

 var borderPanel = new Ext.Panel({
        renderTo: 'borderDiv',
        layout: 'border',
        tltle: 'Border Layout',
        width: 1000,
        height: 800,
        defaults: {
            collapsible: true, // 支持该区域的展开和折叠
            split: true, // 支持用户拖放改变该区域的大小
            bodyStyle: 'padding:15px'
        },
        items: [{
            title: 'Footer-s',
            region: 'south',
            height: 100,
            minSize: 75,
            maxSize: 250,
            html: '这是南边区域 south'

        }, {
            titlr: 'Main Content-c',
            region: 'center',
            collapsible: false,
            html: '这是中间区域 center'
        }, {
            title: 'Navigation-w',
            region: 'west',
            width: 150,
            minSize: 100,
            maxSize: 250,
            html: '这是西边区域 west'
        }, {
            title: 'North',
            region: 'north',
            height: 100,
            html: '这是北边区域 north'
        }, {
            title: 'East',
            region: 'east',
            width: 150,
            html: '这是东边区域 east'
        }]
    });</span>

运行结果:

二、form 布局

简介:也称“表单布局”。是一种专门用于管理表单中输入字段的布局,这种布局在程序中主要用于创建表单字段或表单元素使用。

注意:它可以是一种布局样式,也可以是一个组件。也就是说既可以 layout : ‘form’ 也可以 new Ext.FormPanel 来使用它。区别就是对于 Panel 我们配置了 layout 为 form ,而对于 FormPanel 它默认的布局就是form布局,所以对于习惯于用
Panel 而不习惯用 FormPanel 的朋友尽管用Panel,但是一定要考虑好提交的问题,如果使用 panel 的话,要做提交可是要一个个获得控件的值的,而 FromPanel 则不需要。

js代码:

 var formPanel = new Ext.FormPanel({
        renderTo: 'formDiv',
        width: 500,
        height: 300,
        labelWidth: 80,
        defaultType: 'textfield',
        frame: true,
        items: [{
            fieldLabel: '用户名',
            name: 'username'
        }, {
            fieldLabel: '密码',
            name: 'password'
        }, {
            fieldLabel: '日期',
            name: 'date',
            xtype: 'datefield',
        }]
    });</span>

运行结果:

三、absolute 布局

简介:也称“绝对定位布局”。该布局使用很简单粗暴,直接给出其x、y值来定位即可。

注意:x、y值是相对其父容器而言,从左上角(0,0)开始计算。

js代码:

 var absolutePanel = new Ext.Panel({
        renderTo: 'absoluteDiv',
        layout: 'absolute',
        title: 'Absolute Layout',
        width: 500,
        height: 300,
        items: [{
            title: 'panel-1',
            x: 50,
            y: 50,
            html: 'x:50,y:50'
        }, {
            title: 'panel-2',
            x: 100,
            y: 100,
            html: 'x:100,y:100',
        }]
    });</span>

运行结果:

四、column 布局

简介:也称“列布局”。该布局把整个容器组件看成一列,然后往里面放入子元素的时候,可以通过子元素制定columnWidth和width来制定列的宽度,columnWidth是按百分比来制定列的宽度,width是按照绝对像素来制定列的宽度。在实际应用中可以两种混合使用。

注意:该布局的子面板的所有columnWidth值必须在0~1之间或者是百分比。columnWidth值的总和应该为1,即100%。另外,如果任何子面板没有指定columnWidth值,那么它将占满剩余的空间。

js代码:

 var columnPanel = new Ext.Panel({
        renderTo: 'columnDiv',
        layout: 'column',
        width: 500,
        height: 300,
        items: [{
            title: 'Width = 25%',
            columWidth: .25,
            html: '111111111111'
        }, {
            title: 'Width = 75%',
            columnWidth: .75,
            html: '111111111111'
        }, {
            title: 'Width = 200px',
            width: 200,
            html: '111111111111'
        }]
    });</span>

运行结果:

五、accordion 布局

简介:也称“可折叠布局”、“手风琴布局”。该布局的容器的子元素是可折叠的形式表现。

注意:只有Ext.Panels 和所有Ext.panel.Panel 子项,才可以使用accordion布局。

js代码:

 var accordionPanel = new Ext.Panel({
        renderTo: 'accordionDiv',
        layout: 'accordion',
        title: 'Accordion Layout',
        width: 500,
        height: 300,
        layoutConfig: {animate: false},
        items: [{
            title: 'panel-1', html: 'hello accordion'
        }, {
            title: 'panel-2', html: '<p>段落</p>'
        }, {
            title: 'panel-3', html: '<a href="https://www.baidu.com" target="_blank">百度一下,你就知道</a>'
        }, {
            title: 'panel-4', html: '<button>按钮</button>'
        }]
    });</span>

运行结果:

六、table 布局

简介:也称“表格布局”。按照普通表格的方法布局子元素,用 layoutConfig:{columns:3} ,//将父容器分成3列。它的item可配置的参数有:rowspan 合并的行数;colspan 合并的列数。

注意:table布局本身并没有什么特殊功能,它所实现的效果其实完全可以用 border 布局和 column 布局等方式代替,而且这些布局方式更灵活。

js代码:

<pre name="code" class="javascript">var tablePanel = new Ext.Panel({
        renderTo: 'tableDiv',
        width: 500,
        height: 300,
        layout: 'table',
        layoutConfig: {columns: 3},//定义了一共要分3列
        items: [
            {title: 'panel-1', html: '1111111111',rowspan:2},//合并了2行
            {title: 'panel-2', html: '2222222222',colspan:2},//合并了2列
            {title: 'panel-3', html: '3333333333'},
            {title: 'panel-4', html: '4444444444'}
        ]
    });

运行结果:

七、fit 布局

简介:也称“自适应布局”。子元素将自动填满整个父容器。。

注意:在fit布局下,对其子元素设置宽度是无效的。如果在fit布局中放置了多个组件,则只会显示第一个子元素。

js代码:

 var fitPanel = new Ext.Panel({
        renderTo: 'fitDiv',
        layout: 'fit',
        width: 500,
        height: 300,
        items: [{
            title: 'Fit Panel',
            html: '111111111111'
        }]
    });</span>

运行结果:

八、card 布局

简介:也称“卡牌布局”、“卡片式布局”。该布局最TMD麻烦了。这种布局用来管理多个子组件,并且在任何时刻只能显示一个子组件。这种布局最常用的情况是向导模式,也就是我们所说的分布提交。

注意:由于此布局本身不提供分步导航功能,所以需要用户自己开发该功能。可以通过调用 setActiveItem( ) 函数来实现跳转。由于只有一个面板处于显示状态,那么在初始时,我们可以使用 activeItem: 属性来指定某一个面板的显示。对了,如果Ext-4
之后的版本就不是这样操作了。

js代码:

 // card布局所需要的跳转方法-setActiveItem
    var i=0;
    var navHandler = function(direction){

        if (direction == -1){
            i--;
            if (i < 0) { i = 0;}
        }
        if (direction == 1){
            i++;
            if (i > 2) { i = 2; return false;}
        }
        cardPanel.getLayout().setActiveItem(i);
    };

    var cardPanel = new Ext.Panel({
        renderTo: 'cardDiv',
        layout: 'card',
        title:'注册向导',
        width: 500,
        height: 300,
        activeItem: 0,
        bodyStyle:'padding:15px',
        defaults:{
            border:false
        },
        bbar: [ {
            id: 'move-prev',
            text: '«Previous',
            handler:navHandler.createDelegate(this,[-1])
        },'->', {
            id: 'move-next',
            text: 'Next »',
            handler:navHandler.createDelegate(this,[1])
        }],
        items: [{
            id: 'card-0',
            html: '<h1>欢迎来到注册向导!</h1><p>Step 1 of 3</p>'
        }, {
            id: 'card-1',
            html: '<h1>请填写注册资料!</h1><p>Step 2 of 3</p>'
        }, {
            id: 'card-2',
            html: '<h1>注册成功!</h1><p>Step 3 of 3 - Complete</p>'
        }]
    });</span>

运行结果:

九、anchor 布局

简介:也称“锚点布局”。感觉无卵用, anchor布局将使组件固定于父容器的某一个位置,使用anchor布局的子组件尺寸相对于容器的尺寸,即父容器容器的大小发生变化时,使用anchor布局的组件会根据规定的规则重新渲染位置和大小。

注意:anchor属性为一组字符串,可以使用百分比或者是-数字(注意前面是有负号的,即数字为负数)来表示,字符串之间用空格隔开。

js代码:

   var anchorPanel = new Ext.Panel({
        renderTo: 'anchorDiv',
        layout: 'anchor',
        title: 'Anchor Layout',
        width: 500,
        height: 300,
        items: [{
            title: 'panel-1',
            height: 100,
            anchor: '-50',
            html: '高度等于100,宽度 = 容器宽度 - 50'
        }, {
            title: 'panel-2',
            height: 100,
            anchor: '50%',
            html: '高度等于100,宽度 = 容器宽度的50%'
        },{
            title:'panel-3',
            anchor: '50% 50%',
            html: '高度、宽度 = 容器的50%'
        }]
    });</span>

运行结果:

十、tab 布局

简介:也称“分页布局”、“标签布局”。

注意:码字好累,这个布局你懂得,不多说了。

js代码:

  var tabPanel = new Ext.TabPanel({
        renderTo: 'tabDiv',
        width: 500,
        height: 300,
        activeTab: 0, // 默认显示第一个Tab的内容
        defaults: {
            autoScroll: true
        },
        items: [{
            title: 'Tab-0',
            html: "第一个Tab的内容"
        }, {
            title: 'Tab-1',
            html: '我是另一个Tab',
        }, {
            title: 'Tab-2',
            html: '这是一个可以关闭的Tab',
            closable: true
        }]
    });</span>

运行结果:

十一、vbox 布局

简介:也称“竖直布局”。vertical box ,垂直方向的分行显示。它的 item 有一个 flex
属性,其值越大,对应的组件就会占据越大的空间。

注意:无

js代码:

 var vboxPanel = new Ext.Panel({
        renderTo: 'vboxDiv',
        layout: {
            type: 'vbox',
            align: 'stretch' //拉伸使其充满整个父容器
        },
        width: 500,
        height: 300,
        items: [{
            title: 'panel-1', html: 'flex:1', flex: 1
        }, {
            title: 'panel-2', html: 'height:150', height: 150
        }, {
            title: 'panel-3', html: 'flex:2', flex: 2
        }]
    });</span>

运行结果:

十二、hbox 布局

简介:也称“水平布局”。horizontal box ,水平方向的分列显示。和 vbox 类似,有
flex 属性。

注意:无

js代码:

 var hbox = new Ext.Panel({
        renderTo: 'hboxDiv',
        layout: {
            type: 'hbox',
            align: 'stretch'
        },
        width: 500,
        height: 300,
        items: [{
            title: 'panel-1', html: 'flex:1', flex: 1
        }, {
            title: 'panel-2', html: 'height:150', width: 150
        }, {
            title: 'panel-3', html: 'flex:2', flex: 2
        }]
    })</span>

运行结果:

总结:

简单总结起来border布局一般作为页面整体布局来使用;fit布局适用于那种需要将子类完全占满父类容器的情况;column布局用于多列;form是一种表单特有布局方式,实质是一行一控件的形式;table布局适用多行多列但是有时宽高不太容易控制。而且值得强调的一点就是给一个控件设置layout属性,其实指的是其内部控件的布局方式而不是它本身的布局,这点要搞清楚。

----------------------------------------------------- end -----------------------------------------------------

最后感谢以下链接的作者提供的资源参考:

ExtJs布局详解

ExtJS中layout的12种布局风格

extjs布局方式

ExtJS之布局篇

时间: 2024-10-27 06:54:44

ExtJs常用布局--layout详解(含实例)的相关文章

EXTJS常用布局详解

ExtJS的容器组件都可以通过设置layout参数来选择布局改变显示风格, 它的有效值有: absolute:控制位置,accordion:手风琴布局,anchor:控制大小,border:边界式布局,card:卡片布局,column:列布局,fit:填充式布局,form:表单布局,table:表格式布局 一共9种,在这里简单总结一下 absolute:Absolute布局的目的是为了扩展布局的属性,使得布局更容易使用 accordion:accordion布局也称手风琴布局,在accordio

Extjs MVC开发模式详解

Extjs MVC开发模式详解 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs 4.x版本中引入了MVC开发模式,开始将一个JS(Extjs)应用程序分割成Model-View-Controller三层,为JS应用程序的如何组织代码指明了方向,同时使得大规模JS代码变得更加易于重用和维护:这就是Extjs MVC开发模式的初衷. 在官方给出的MVC例子中,我们可以看到一个简单的列表编辑功能,这篇文章就围绕这个功能进

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!

log4j.properties配置详解与实例

log4j.properties配置详解与实例-全部测试通过 最近使用log4j写log时候发现网上的写的都是千篇一律,写的好的嘛不全,写的全一点的嘛没有一点格式,看着累.这里把网上收集到的整理了一下,并且全部都在机器上测试成功了.这么好的文档估计没有了吧? ################################################################################ #①配置根Logger,其语法为: # #log4j.rootLogger =

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

Linux下的压缩zip,解压缩unzip命令详解及实例

Linux下的压缩zip,解压缩unzip命令 本人亲自测试总结: linux 安装unzip zip 安装命令:yum install -y unzip zip # unzip yasuo.zip 方法一: 安装命令:yum install -y unzip zip 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:# zip -r yasuo.zip abc.txt dir12.我下载了一个yasuo.zip文件,想解压缩: # unzip yasuo.zip

【甘道夫】HBase(0.96以上版本)过滤器Filter详解及实例代码

说明: 本文参考官方Ref Guide,Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现. 本文尽量遵从Ref Guide中"9.4. Client Request Filters"的行文顺序,便于读者对比查看,但内容比官方文档更加详实. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37653177 目录: 引言 -- 参数基础

GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]

[OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点缓冲区上的输入流中接收顶点数据,并且把数据项转换为规范的格式.vertex shader通常用来把顶点从模型空间变换到平面空间,vertex shader读取一个顶点,输出一个顶点.Pixel Shader读取单一pixel属性,输出包含颜色和Z信息的的片断.而geometry shader是Dir

常用memcached命令详解

常用memcached命令详解: Memcached作为缓存服务器,对其操作的命令主要分为三类: 1.  服务器状态命令:可以查看memcahced服务的当前状态 2.  数据存储命令:如何存储数据到memcached服务器中 3.  数据读取命令:获取memacahed服务器中的数据 4.  数据删除命令:删除memcached服务器中的数据 一.服务器状态命令 1. stats: memcached 实例的当前统计数据. STAT pid 22459