组件装在容器里,那么这些组件是如何布局的呢?在这之前所有的例子都是使用setBounds来 进行绝对坐标的定位的.

在实际应用过程中大都是采用布局管理器的方式来布局容器中的组件.

布局管理器定义了组件的摆放方式.

为什么VB,Delphi程序不需要布局管理器,而Java GUI程序却需要的呢?

因为Java开发程序的目标是要跨平台的.而每一个操作系统的屏幕定义是不同的.

如果像VB,Delphi那样使用绝对坐标定位界面组件,那么在Windows下看着好好的界面,到了Linux和MacOS上就会变得一塌糊涂.

除非你开发的JavaGUI程序只在Windows下用,但是即使这样,在不同分辨率下,界面的形状也会不大一样.

布局管理器:

分为:

1.充满式(FillLayout类) 充满式布局管理器,组件的大小会尽量的充满整个容器

  把组件摆放成一行或者一列,并强制组件大小一致.里面的组件都会尽量的充满这个容器.

  另外FillLayout不能折行,不能设置边界距离和间距.

  FillLayout一般使用于任务栏,工具栏,Group中的一组复选框,或者容器内只有一个组件的时候.

  如果一个Shell中只有一个Group组件,那么将FillLayout用于shell.则其内的Group将完全充满Shell.

  FillLayout虽然功能单一,但是其自动充满窗口的方式,在SWT界面设计总还是很常用的.

2.行列式(RowLayout类) 行列式布局管理器,简单的排列组件.

  RowLayout可以是组件折行显示.并可以设置边界和间距.

  另外,它还可以对每个组件通过setLayoutData方法设置RowData对象,RowData用来设置组件的大小.

  使用rowLayout.wrap控制自动拆行(默认值true)

  使用SWT.VERTICAL式样控制排列方式

  使用rowLayout.pack控制组件大小(默认值true)

  使用rowLayoutjustify控制控件伸展(默认是false)

  要想改变按钮本身的外观.则需要使用RowData类,RowData成为布局数据类.

  为RowLayout专用,在讲GridLayout类时,它也有一个专用的布局数据类GridData.

  GridData的目的也是和RowData一样,即改变容器中的组件和外观形状.

  RowData最常用的定义格式是:new RowData(int width,int heigh)

  例如:RowData rowData = new RowData(10,30)表示应用了这个rowData的组件将改变其大小,

  变成宽10像素,高30像素.

3.网格式(GridLayout类) 网格式布局管理器,非常强大,可以胜任所有的布局.

  GridLayout可能是最常用的,功能最强大的标准布局类,当然也最复杂,

  GridLayout的布局方式是把容器中的组件摆放在一个个格子里,它有许多设置项,并且同RowLayout一样也有

  专用的布局数据类GridData.GridData的使用颇为复杂,

  而GridLayout强大之处也在于它可以通过GridData来设置每一个组件外观形状.

  GridLayout类的基本实例

  使用gridLayout.numColumns设置列数(默认值1)

  使用makeColumnsEqualWidth把组件等距分开(默认false)

  使用MarginWidth,Marginheight,HorizontalSpacing,VerticalSpaciong属性

4.堆栈式(StackLayout类) 像书页一样,只显示最前面的组件.

5.表格式(FormLayout类) 表格式布局管理器,通过创建组件各个边的距离来布局组件,和GridLayout一样强大.

  使用marignWidth,marginHeight设置边距(这两个属性,来设置容器的左边距和上边距(单位:像素))

  使用FormData的构造函数(FormLayout也有自己的布局数据类,他的使用方法是new FormData()或new FormData(int width,int height))

  FormAttachment类的用法

  FormAttachment是在FormData下的,更进一步的布局数据类,它的用法主要体现在它不同的构造函数中.

关于SWT中的布局Layout的更多相关文章

  1. SWT中的布局之-----FormLayout(表格式布局)

    表格式(FormLayout类) 表格式布局管理器,通过创建组件各个边的距离来布局组件,和GridLayout一样强大. 用GridLayout与FormLayout都可以实现相同的界面效果,但有时使 ...

  2. [转]struct实例字段的内存布局(Layout)和大小(Size)

    在C/C++中,struct类型中的成员的一旦声明,则实例中成员在内存中的布局(Layout)顺序就定下来了,即与成员声明的顺序相同,并且在默认情况下总是按照结构中占用空间最大的成员进行对齐(Alig ...

  3. Android Studio分类整理res/Layout中的布局文件(创建子目录)

    res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...

  4. 在JazzyViewPager中调用其它layout布局xml并使用

    开源地址:https://github.com/jfeinstein10/JazzyViewPager 发现网上的例子使用的是直接创建的一个TextView来做的.但是实际上使用,不可能只有这一个控件 ...

  5. Draw2d中的布局管理器Layout比较

    最近在研究Eclipse中的GEF开发,在跟着GEF-whole-upload教程做一个GEF应用程序的例子时,发现Figure上的控件无法显示,谷歌了很久也没找到解决方案,最后终于发现是Layout ...

  6. 源代码解析Android中View的layout布局过程

    Android中的Veiw从内存中到呈如今UI界面上须要依次经历三个阶段:量算 -> 布局 -> 画图,关于View的量算.布局.画图的整体机制可參见博文 < Android中Vie ...

  7. Android中View的layout mechanism(布局机制)

    layout mechanism Android中View的layout mechanism主要分为两个阶段:measure阶段和layout阶段.layout mechanism按照一定的顺序进行, ...

  8. SWT中各种参数大全

    1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...

  9. Asp.Net Razor中的Consistent Layout

    有意义的参考:http://www.asp.net/web-pages/tutorials/working-with-pages/3-creating-a-consistent-look Asp.ne ...

随机推荐

  1. git 的版本回滚

    当用git clone 复制远程代码库到本地时,使用 git branch 只能看到默认库(master),当远程库有多个分支时,可以使用 git branch -a 查看全部的分支, 然后git c ...

  2. 获取EntityFrameWork返回的错误和ModelState中的错误

    都是通过循环才能找到具体的错误信息 具体方法参见这两篇文章: EntityFrameWork: http://www.cnblogs.com/shouzheng/archive/2012/04/19/ ...

  3. 用户名 不在 sudoers文件中,此事将被报告。

    原文解决方法:http://blog.csdn.net/lincyang/article/details/21020295 CentOS7.0 用到sudo权限的时候出现的问题,如题. sudo命令可 ...

  4. Linux内核,文件系统移植过程中出现的一些问题与解决办法

    1.bootm地址和load address一样 此种情况下,bootm不会对uImage header后的zImage进行memory move的动作,而会直接go到entry point开始执行. ...

  5. 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)

    内容概要: CentSO_64bit集群搭建, hadoop2.2(64位)编译,安装,配置以及测试步骤 新版亮点: 基于yarn计算框架和高可用性DFS的第一个稳定版本. 注1:官网只提供32位re ...

  6. Unity3D入门之JavaScript动态创建对象

    接着上一篇Unity3D入门文章,这里继续使用JavaScript脚本语言. 调试:Unity集成了MonoDevelop编辑器,在代码某行的左侧点击,即可下一个断点.然后先关闭Unity编辑器,在M ...

  7. Android实例-TTabControl的使用(XE8+小米2)

    结果:  1.如果直接改变Tab的TabIndex,那样是没有动态效果的.如果想要动态效果需要用到ChangeTabAction1; 2.ChangeTabAction1可以直接为按钮指定Action ...

  8. hdoj 2050 折线分割平面

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  9. 【每天一个Linux命令】10. 用户账号的新建/修改/删除以及密码修改 useradd/usemod/userdel/passwd

    在 Linux 系统中,与用户管理有关的文件主要有如下几个:分别是/etc/passwd,/etc/shadow,/etc/gfoup,/etc/gshadow .它们分别与用户的账号,密码,用户组及 ...

  10. jquery.validate.js 应用示例

    今天发现了jQuery一个很强大的验证表单插件(jquery.validate.js 下载地址:http://bassistance.de/jquery-plugins/jquery-plugin-v ...