终于来到我最喜欢的部分——布局篇章。可以说布局就是SWT的灵魂。
布局如此重要,那么我们该怎么理解布局这个概念呢?我们以Button这个组件为例子,如果将他放在Shell上,那么他该定位在shell的哪个位置呢,他的大小又该如何控制呢?这些都是布局控制的内容。
两种定位方式
绝对定位
绝对定位,通过代码的方式设置控件应该出现在容器的哪个位置。在SWT中,设置位置需要提供一个四元组(x, y, width, height)。具体如下所示
我们创建了一个Button,并通过setBounds
方法定位button在shell中的位置
Button button = new Button(shell, SWT.PUSH);
button.setText("决定定位");
button.setBounds(100, 50, 200, 50);
tip: 需要注意的是绝对定位下,组件的布局不会随着窗口大小的变化而变化
托管定位
托管定位,编码人员无需手动设置组件的位置,只需要将组件放入容器面板中,组件的具体定位全部交由容器面板的布局(Layout)决定。
在SWT框架中,托管定位常见的布局有如下5种:RowLayout,FillLayout,GridLayout,StackLayout,FormLayout
为了更好的理解布局这个概念,我们以搭积木为例。积木对应着SWT中的组件,如Button、Label、Text等。这些积木需要积木板来容纳,也就是容器面板。绝对定位的意思是,积木通过吸铁石固定在积木板上,通过对积木的设定,我们可以将积木定位在积木板上的任意位置;托管定位的意思是,我们将积木放在积木板上,积木会依据积木板已有的结构自动出在合适的位置,积木板已有的结构就像通道与卡槽,会让组件自动滑倒合适的位置而不需要编码人员手动控制。我们需要做的只是设置好积木板的结构,也就是布局Layout。
FillLayout
FillLayout是托管布局的一种,也是最简单的布局方式。它的布局理念是尽可能的填充满容器,且保证容器内的组件大小均匀。
如下所示,我们为Shell窗口分别创建了1个,3个Button,在FillLayout的影响下,Button填充满整个Shell,并且大小均匀。
布局方向
我们可以通过常量SWT来控制FillLayout的布局方向
常量 | 描述 | 图片 |
---|---|---|
SWT.VERTICAL | 垂直布局 | |
SWT.HORIZONAL | 水平布局 |
tip: 此处的SWT.VERTICAL , SWT.HORIZONAL针对的是shell的布局,不是Button组件的布局
布局留白
我们可以设置FillLayout的marginHeight
,marginWidth
属性控制组件四周留白
FillLayout fillLayout = new FillLayout(SWT.HORIZONTAL);
fillLayout.marginHeight = 20;
fillLayout.marginWidth = 50;
fillLayout.spacing = 10;
shell.setLayout(fillLayout);