JavaGUI之SWT框架【GridLayout】

GridLayout

GridLayout顾名思义,按照网格的形式进行布局。在GridLayout布局的影响下,面板容器会被划分为若干个网格,在进行布局时会按照从左到右,从上到下的顺序填充容器。具体的划分方式需要编码人员手动设置。

网格布局是一种非常强大的布局方式,之所以强大和它相关联的layout data object —— GridData有关。GridData能够单独控制每一个在GridLayout布局下的组件。

numColumns属性

numColumns用于设置划分的表格列数。进行布局时,如果一行的所有列都填充完成后,则会换行填充。如果规定的列还未填充满则不会换行,即使超出边缘。

在这里插入图片描述

makeColumnsEqualWidth 属性

该属性用于控制分割的表格每一列是否等宽。

tip: 等宽是划分的列等宽,而不是列中填充的元素

在这里插入图片描述

留白属性

和FillLayout一样,GridLayout也有margin类的变量属性,本文不再赘述。感兴趣的读者可以看这篇文章JavaGUI框架之SWT【布局FillLayout】

此外GridLayout将间距划分为水平和垂直间距

gridLayout2.horizontalSpacing = 30;
gridLayout2.verticalSpacing = 50;

在这里插入图片描述

GridData

GridData是layout data的一种,专门用于控制GridLayout控制下,组件的布局。
GridData有两种创建形式,一种是无参构造,然后进行参数赋值

GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalSpan = 2;

另一种是通过构造函数创建。GridData有很多的成员变量,为了减少代码量,GridData提供了丰富的有参构造函数

new GridData (SWT.FILL, SWT.CENTER, true, false));
new GridData (SWT.FILL, SWT.FILL, true, true, 2, 1));

horizontalAlignment属性

horizontalAlignment用于设置控件在单元格水平方向的对齐格式。其合法参数如下 (设置gridLayout的控件只有b1)

参数描述样式
SWT.BEGINNING(SWT.LEFT)将控件放置在单元格左边在这里插入图片描述
SWT.CENTER将控件放置在单元格中间在这里插入图片描述
SWT.END(SWT.RIGHT)将控件放置在单元格右边在这里插入图片描述
SWT.FILL用控件填充满单元格在这里插入图片描述

verticalAlignment属性

verticalAlignment控制组件在单元格中垂直方向上的布局,其参数和样式均和horizontalAlignment一致,故不在赘述。

widthHint / heightHint

widthHint 指定了控件首选的宽度。如果窗口发生变化,控件的大小会实时变化,自动适应新的窗口。heightHint同理。一般来说,widthHint设定后不会发生改变。

grabExcessHorizontalSpace

grabExcessHorizontalSpace 指定单元格的宽度是否根据窗口(严格来说是父Composite)的大小进行变化。如果 grabExcessHorizontalSpace 设置为true,那么宽度计算遵循以下规则:

  • 如果父容器中有额外的水平空间,单元格将会变宽,超过其首选宽度。
  • 若父容器中没有足够的水平空间,单元格将收缩直到达到由 GridData.minimumWidth 指定的最小宽度。新宽度将是 “minimumWidth” 与 “首选宽度 - delta” 中的较大值,delta 表示缺少的空间量除以所有占用列的数量。
  • 如果父容器被压缩,单元格宽度将按照 GridData.widthHint 指定的首选宽度进行设置。

tip: 以上计算规则都是对单元格的计算,而不是对控件的!只有用控件填充单元格,才能可视化的观察单元格大小的变化。所以下面所有效果都设置horizontalAlignment = SWT.FILL

规则一
在这里插入图片描述


规则二
通过不断的调整numColumns来控制父组件每行能够容纳的button数量。由下图可以看出,一开始水平控件不够的情况加,第三个button长度是被压缩的。随着可用控件变大,button不断的占满可用的控件。
在这里插入图片描述


规则三
在这里插入图片描述

grabExcessVerticalSpace

与grabExcessHorizontalSpace功能一致,故不在赘述

minimumWidth, minimunHeight 属性

指定控件的最小宽度,这个值只有在grabExcessHorizontalSpace = true时才有用,minimunHeight 同理。
在这里插入图片描述

horizontalSpan / verticalSpan 属性

horizontalSpan用于控制控件在水平方向上占据多少单元格。例如gridData.horizontalSpan = 3;表示组件横跨3个单元格,具体如下所示。
verticalSpan表示垂直方向上跨越多少单元格

在这里插入图片描述

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值