组件装在容器里,那么这些组件是如何布局的呢?在这之前所有的例子都是使用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下的,更进一步的布局数据类,它的用法主要体现在它不同的构造函数中.

最新文章

  1. 线段树初步&&lazy标记
  2. qweb
  3. POJ1699 HDU 1560 Best Sequence(AC自动机 最短路)
  4. 标准库中的-stack
  5. JABX简单介绍
  6. Python核心编程--学习笔记--4--Python对象
  7. swift学习(二)--基本运算符、字符串、集合操作
  8. UVALive - 3401 Colored Cubes
  9. [BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】
  10. h.264加权预测
  11. UVa1587 盒子
  12. bzoj4198 荷马史诗 哈夫曼编码
  13. 201771010126 王燕《面向对象程序设计(java)》第十八周学习总结
  14. js事件的绑定与移除
  15. 一篇文章带你看懂Cloudflare信息泄露事件
  16. linux开机自启动设置,自定义开机启动模版,nginx开机自启动服务
  17. jmeter-如何在JDBC Request中添加多条语句执行
  18. hdu 3415 Max Sum of Max-K-sub-sequence 单调队列优化DP
  19. CSS文本溢出处理方式
  20. MySQL开发技巧

热门文章

  1. mexopencv问题:Invalid MEX file GLIBCXX_3.4.15 error
  2. Zabbix探索:使用msmtp进行邮件告警
  3. 【原】Storm 守护线程容错机制
  4. [LeetCode]LRU Cache有个问题,求大神解答【已解决】
  5. ffmpeg常见命令
  6. 【转载】chmod u+s
  7. BNUOJ-26476 Doorman 贪心
  8. Java管道流PipedStream
  9. CSS层叠样式选择器归纳
  10. css3动画属性中的transition属性