首页 > 其他分享 >ExtJs常用布局--layout详解(含实例)

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

时间:2024-07-12 19:55:39浏览次数:17  
标签:layout title -- 布局 height width html ExtJs panel

序言:

笔者用的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代码:

 

[javascript] view plain copy    print?
  1. var borderPanel = new Ext.Panel({  
  2.        renderTo: 'borderDiv',  
  3.        layout: 'border',  
  4.        tltle: 'Border Layout',  
  5.        width: 1000,  
  6.        height: 800,  
  7.        defaults: {  
  8.            collapsible: true, // 支持该区域的展开和折叠  
  9.            split: true, // 支持用户拖放改变该区域的大小  
  10.            bodyStyle: 'padding:15px'  
  11.        },  
  12.        items: [{  
  13.            title: 'Footer-s',  
  14.            region: 'south',  
  15.            height: 100,  
  16.            minSize: 75,  
  17.            maxSize: 250,  
  18.            html: '这是南边区域 south'  
  19.   
  20.        }, {  
  21.            titlr: 'Main Content-c',  
  22.            region: 'center',  
  23.            collapsible: false,  
  24.            html: '这是中间区域 center'  
  25.        }, {  
  26.            title: 'Navigation-w',  
  27.            region: 'west',  
  28.            width: 150,  
  29.            minSize: 100,  
  30.            maxSize: 250,  
  31.            html: '这是西边区域 west'  
  32.        }, {  
  33.            title: 'North',  
  34.            region: 'north',  
  35.            height: 100,  
  36.            html: '这是北边区域 north'  
  37.        }, {  
  38.            title: 'East',  
  39.            region: 'east',  
  40.            width: 150,  
  41.            html: '这是东边区域 east'  
  42.        }]  
  43.    });</span>  


运行结果:

 

 

 

二、form 布局

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

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

js代码:

 

[javascript] view plain copy    print?
  1. var formPanel = new Ext.FormPanel({  
  2.        renderTo: 'formDiv',  
  3.        width: 500,  
  4.        height: 300,  
  5.        labelWidth: 80,  
  6.        defaultType: 'textfield',  
  7.        frame: true,  
  8.        items: [{  
  9.            fieldLabel: '用户名',  
  10.            name: 'username'  
  11.        }, {  
  12.            fieldLabel: '密码',  
  13.            name: 'password'  
  14.        }, {  
  15.            fieldLabel: '日期',  
  16.            name: 'date',  
  17.            xtype: 'datefield',  
  18.        }]  
  19.    });</span>  


运行结果:

 

 

三、absolute 布局

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

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

js代码:

 

[javascript] view plain copy    print?
  1. var absolutePanel = new Ext.Panel({  
  2.        renderTo: 'absoluteDiv',  
  3.        layout: 'absolute',  
  4.        title: 'Absolute Layout',  
  5.        width: 500,  
  6.        height: 300,  
  7.        items: [{  
  8.            title: 'panel-1',  
  9.            x: 50,  
  10.            y: 50,  
  11.            html: 'x:50,y:50'  
  12.        }, {  
  13.            title: 'panel-2',  
  14.            x: 100,  
  15.            y: 100,  
  16.            html: 'x:100,y:100',  
  17.        }]  
  18.    });</span>  

运行结果:

 



 

四、column 布局

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

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

js代码:

[javascript] view plain copy    print?
  1. var columnPanel = new Ext.Panel({  
  2.        renderTo: 'columnDiv',  
  3.        layout: 'column',  
  4.        width: 500,  
  5.        height: 300,  
  6.        items: [{  
  7.            title: 'Width = 25%',  
  8.            columWidth: .25,  
  9.            html: '111111111111'  
  10.        }, {  
  11.            title: 'Width = 75%',  
  12.            columnWidth: .75,  
  13.            html: '111111111111'  
  14.        }, {  
  15.            title: 'Width = 200px',  
  16.            width: 200,  
  17.            html: '111111111111'  
  18.        }]  
  19.    });</span>  

运行结果:

 

 

五、accordion 布局

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

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

js代码:

 

[javascript] view plain copy    print?
  1. var accordionPanel = new Ext.Panel({  
  2.        renderTo: 'accordionDiv',  
  3.        layout: 'accordion',  
  4.        title: 'Accordion Layout',  
  5.        width: 500,  
  6.        height: 300,  
  7.        layoutConfig: {animate: false},  
  8.        items: [{  
  9.            title: 'panel-1', html: 'hello accordion'  
  10.        }, {  
  11.            title: 'panel-2', html: '<p>段落</p>'  
  12.        }, {  
  13.            title: 'panel-3', html: '<a href="https://www.baidu.com" target="_blank">百度一下,你就知道</a>'  
  14.        }, {  
  15.            title: 'panel-4', html: '<button>按钮</button>'  
  16.        }]  
  17.    });</span>  

运行结果:

 



六、table 布局

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

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

js代码:

 

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

运行结果:

 

七、fit 布局

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

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

js代码:

 

[javascript] view plain copy    print?
  1. var fitPanel = new Ext.Panel({  
  2.        renderTo: 'fitDiv',  
  3.        layout: 'fit',  
  4.        width: 500,  
  5.        height: 300,  
  6.        items: [{  
  7.            title: 'Fit Panel',  
  8.            html: '111111111111'  
  9.        }]  
  10.    });</span>  

运行结果:

 

 

八、card 布局

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

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

js代码:

 

[javascript] view plain copy    print?
  1. // card布局所需要的跳转方法-setActiveItem  
  2.    var i=0;  
  3.    var navHandler = function(direction){  
  4.   
  5.        if (direction == -1){  
  6.            i--;  
  7.            if (i < 0) { i = 0;}  
  8.        }  
  9.        if (direction == 1){  
  10.            i++;  
  11.            if (i > 2) { i = 2; return false;}  
  12.        }  
  13.        cardPanel.getLayout().setActiveItem(i);  
  14.    };  
  15.   
  16.    var cardPanel = new Ext.Panel({  
  17.        renderTo: 'cardDiv',  
  18.        layout: 'card',  
  19.        title:'注册向导',  
  20.        width: 500,  
  21.        height: 300,  
  22.        activeItem: 0,  
  23.        bodyStyle:'padding:15px',  
  24.        defaults:{  
  25.            border:false  
  26.        },  
  27.        bbar: [ {  
  28.            id: 'move-prev',  
  29.            text: '«Previous',  
  30.            handler:navHandler.createDelegate(this,[-1])  
  31.        },'->', {  
  32.            id: 'move-next',  
  33.            text: 'Next »',  
  34.            handler:navHandler.createDelegate(this,[1])  
  35.        }],  
  36.        items: [{  
  37.            id: 'card-0',  
  38.            html: '<h1>欢迎来到注册向导!</h1><p>Step 1 of 3</p>'  
  39.        }, {  
  40.            id: 'card-1',  
  41.            html: '<h1>请填写注册资料!</h1><p>Step 2 of 3</p>'  
  42.        }, {  
  43.            id: 'card-2',  
  44.            html: '<h1>注册成功!</h1><p>Step 3 of 3 - Complete</p>'  
  45.        }]  
  46.    });</span>  

运行结果:

 



 

九、anchor 布局

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

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

js代码:

[javascript] view plain copy    print?
  1. var anchorPanel = new Ext.Panel({  
  2.      renderTo: 'anchorDiv',  
  3.      layout: 'anchor',  
  4.      title: 'Anchor Layout',  
  5.      width: 500,  
  6.      height: 300,  
  7.      items: [{  
  8.          title: 'panel-1',  
  9.          height: 100,  
  10.          anchor: '-50',  
  11.          html: '高度等于100,宽度 = 容器宽度 - 50'  
  12.      }, {  
  13.          title: 'panel-2',  
  14.          height: 100,  
  15.          anchor: '50%',  
  16.          html: '高度等于100,宽度 = 容器宽度的50%'  
  17.      },{  
  18.          title:'panel-3',  
  19.          anchor: '50% 50%',  
  20.          html: '高度、宽度 = 容器的50%'  
  21.      }]  
  22.  });</span>  

运行结果:

 

十、tab 布局

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

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

js代码:

 

[javascript] view plain copy    print?
  1. var tabPanel = new Ext.TabPanel({  
  2.       renderTo: 'tabDiv',  
  3.       width: 500,  
  4.       height: 300,  
  5.       activeTab: 0, // 默认显示第一个Tab的内容  
  6.       defaults: {  
  7.           autoScroll: true  
  8.       },  
  9.       items: [{  
  10.           title: 'Tab-0',  
  11.           html: "第一个Tab的内容"  
  12.       }, {  
  13.           title: 'Tab-1',  
  14.           html: '我是另一个Tab',  
  15.       }, {  
  16.           title: 'Tab-2',  
  17.           html: '这是一个可以关闭的Tab',  
  18.           closable: true  
  19.       }]  
  20.   });</span>  

运行结果:

 



 

十一、vbox 布局

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

注意:无

js代码:

 

[javascript] view plain copy    print?
  1. var vboxPanel = new Ext.Panel({  
  2.        renderTo: 'vboxDiv',  
  3.        layout: {  
  4.            type: 'vbox',  
  5.            align: 'stretch' //拉伸使其充满整个父容器  
  6.        },  
  7.        width: 500,  
  8.        height: 300,  
  9.        items: [{  
  10.            title: 'panel-1', html: 'flex:1', flex: 1  
  11.        }, {  
  12.            title: 'panel-2', html: 'height:150', height: 150  
  13.        }, {  
  14.            title: 'panel-3', html: 'flex:2', flex: 2  
  15.        }]  
  16.    });</span>  

运行结果:

 



十二、hbox 布局

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

注意:无

js代码:

 

[javascript] view plain copy    print?
  1. var hbox = new Ext.Panel({  
  2.        renderTo: 'hboxDiv',  
  3.        layout: {  
  4.            type: 'hbox',  
  5.            align: 'stretch'  
  6.        },  
  7.        width: 500,  
  8.        height: 300,  
  9.        items: [{  
  10.            title: 'panel-1', html: 'flex:1', flex: 1  
  11.        }, {  
  12.            title: 'panel-2', html: 'height:150', width: 150  
  13.        }, {  
  14.            title: 'panel-3', html: 'flex:2', flex: 2  
  15.        }]  
  16.    })</span>  

运行结果:

 



 

总结:

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

 

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

标签:layout,title,--,布局,height,width,html,ExtJs,panel
From: https://www.cnblogs.com/joe-tang/p/7144883.html

相关文章

  • P1065 [NOIP2006 提高组] 作业调度方案
     首先纠正一下题目错误,红色框应当为3-1,蓝色框应当为3-2 简单概括一下上述题意,首先看输入案例和输出案例代表哪些东西:另外注意以下约束条件对同一个工件,每道工序必须在它前面的工序完成后才能开始;同一时刻每一台机器至多只能加工一个工件。在保证约束条件 (1.)(2.)......
  • 7-12 训练记
    今日训练总结回滚莫队(https://www.luogu.com.cn/problem/P4137)难点:代码中出现了许多小问题,调试过程耗时较长。解决方法:通过调试较大的数据并成功找到问题。找到出错且数据较小的询问,逐步调试。对于莫队这种在询问间转移答案的算法,找到一组出错询问及其之前的处理询问,便......
  • 线程池的概念和创建
    一,什么是线程池线程池是在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给该线程执行。当任务执行完毕后,线程将返回到线程池,可以被其他任务复用。二,线程池的运行机制1.当任务到达最大时,线程池管理......
  • ExtJS中layout的12种布局风格
    extjs的容器组件都可以设置它的显示风格,它的有效值有absolute,accordion,anchor,border,card,column,fit,formandtable. 一共9种。另外几种见: http://www.sencha.com/deploy/dev/examples/layout-browser/layout-browser.html 里面有详细的例子。 ·  absol......
  • 一文入门【NestJs】Controllers
    Nest学习系列✈️一文带你入门【NestJS】✈️前言流程图Controllers控制器主要负责处理传入请求,并向客户端返回响应,控制器可以通过路由机制来控制接收那些请求,通常一个Controllers种会有多个匹配路由,不同的路由可以知情不同操作,我们可以通过装饰器将类与所需要的元数据关......
  • extjs中treepanel例子
    :TreePanel继承自Panel,在ExtJS中使用树控件含有丰富的属性和方法实现复杂的功能。其中Ext.tree.TreeNode代表一个树节点,比较常用的属性包括text、id、icon、checked等、异步树Ext.tree.AsyncTreeNode、树加载器Ext.tree.TreeLoader。下面介绍几个extjs中treepanel例子一、TreePan......
  • python每日学习4:函数的定义和各类参数定义与用法
    目录目录一、函数的定义二、参数的定义和用法1、必选参数2、默认参数3、可变参数4、关键字参数5、命名关键字参数三、参数在实际操作中的要求一、函数的定义1、函数代码块以def关键词开头,后接函数名称和圆括号()2、在圆括号内定义传入参数3、函数的第一行语句可以......
  • Extjs xtype 一览表
    ExtJs xtype一览基本组件:xtypeClass描述buttonExt.Button按钮splitbuttonExt.SplitButton带下拉菜单的按钮cycleExt.CycleButton带下拉选项菜单的按钮buttongroupExt.ButtonGroup编组按钮(Since3.0)slider......
  • echo写入文件多行输入
    在Shell脚本中,你可以使用多种方法来使用echo命令写入多行文本到文件。以下是一些示例:使用echo命令多次写入:bashecho"第一行文本">file.txtecho"第二行文本">>file.txtecho"第三行文本">>file.txt使用echo命令结合>和IFS(内部字段分隔符):bashIFS='\n'echo-e"第一......
  • JAVA利用HttpClient进行POST请求(HTTPS)
    finalHttpClientUtilhttpClientUtil=newHttpClientUtil();finalMap<String,String>map=Maps.newHashMap();map.put("username",workNo);map.put("password",passwd);finalStringresultStr......