SWT 布局

FillLayout

当您向屏幕添加小部件时,FillLayout将它们水平排列在一行中或垂直排列在一列中。它的空间它们都是均匀的,因此整个组合由小部件填充。没有布局数据,所以你需要做的就是定义布局是水平的还是垂直的把小部件放在屏幕上。

下面的例子展示了如何使用FillLayout在屏幕上排列标签。请注意,您不必像布局管理器那样为标签设置任何属性照顾他们的位置:

 运行结果

 

 现在,如果我们调整窗口的大小,标签仍然是均匀间隔的:

 

 

RowLayout:

RowLayout按行排列小部件,我们可以声明将RowLayout设置为水平或垂直,使小部件以水平方式排列行或垂直列。不像FillLayout, RowLayout也有一些其他的字段可以设置,如换行和包装以及页边距和间距。如果我们将pack字段设置为true,那么所有小部件将保持它们的自然大小,并且它们将被放置在尽可能的左边(或顶部)。这是一个关键的特点区分RowLayout和FillLayout。例如,如果我们为前面的例子中的RowLayout,它的pack字段设置为true,最初是窗口看起来一样。然而,当我们调整它的大小时,小部件仍然保持相同的大小尽可能与顶部对齐:

 

 RowLayout与FillLayout的另一个区别是换行字段。当wrap字段设置为true时,如果一行对窗口来说太长,则布局将会将它绕成两行。以我们之前的FillLayout例子为例。如果我们调整了窗口的大小,使它太小,所有的小部件都不能适应,它们很简单重叠:

但是,如果我们使用相同的代码,但是使用RowLayout,布局管理器将会弥补空间不足,创建两列而不是一列:

 下面的示例演示了如何使用pack字段均匀地分隔您的小部件。在这个例子中,pack被设置为false,所以屏幕上的所有按钮都将是相同的大小。wrap字段被设置为true,所以根据窗口的大小,可以不止一行:

 

 根据窗口的大小,不同效果

 

 

  GridLayout:

GridLayout提供了比RowLayout或FillLayout更大的灵活性,但是灵活性是有代价的。GridLayout有许多需要操作的字段,以及GridData,它几乎总是需要添加到小部件中,以便完全获得GridLayout管理器的好处。与GridLayout相关的最重要的字段是numColumn字段和makeColumnsEqualWidth字段。这让你可以决定窗口小部件的列数,以及它们是否应该都是相同的大小,或者取小部件的大小。你应该总是列数等于您在某一特定情况下所希望的最大列数行。一旦确定了列的数量,就可以将任何小部件span设置为如你所愿,很多专栏。这使得小部件的放置非常灵活。与RowLayout相反,RowData对象是可用的,但通常不是必要时,GridData对象在GridLayout中非常重要。最重要的GridData对象的方面是允许您控制行为的字段屏幕大小调整时的小部件。

 

 注意,必须为每个小部件声明一个单独的GridData对象。我们有两个该布局中的列和屏幕底部的按钮横跨这两列。这段代码产生的窗口如下所示:

 在本例中,文本小部件被设置为水平填充。这意味着不仅做文本小部件初始化它们的大小以填满屏幕宽度的其余部分,但也当我们调整屏幕大小,它们就会占据额外的空间:

 如果我们去掉提供此特性的代码行,请注意区别。不仅文本小部件成为默认大小,但它们不会在屏幕时调整大小调整大小:

 

FormLayout:

在使用GridLayout时,必须提前计划,如添加的顺序小部件是它们在网格中出现的顺序。当使用FormLayout时,就总体布局而言,每个小部件都与所有其他小部件分开。在RowLayout中,RowData对象很有用,但不是完全必要的。在GridLayout, GridData对象是非常必要的但是布局管理器可以起作用。在FormLayout中,FormData对象是绝对重要的。如果你不分配每个小部件的FormData对象,它们都将被放置在相同的默认空间中您的所有小部件将简单地位于另一个小部件之上。每个小部件都有自己的FormData对象,通过使用FormAttachments放置该对象FormAttachments和FormLayout背后的思想是可以将小部件的边缘钉到窗口的不同位置。我们可以分配每个小部件的上、下、左、右边缘的位置。我们可以定义这些位置可以是百分比、其他小部件的偏移量,甚至是对齐。

下面的示例采用了前面所有不同类型的布局示例并使用FormLayout将它们放在一起。前面的每个例子都放在一个组合,并且使用FormLayout将这三个组合放置在shell上。

首先,我们将在shell上设置布局,并创建一个包含FillLayout的例子,叫做fillComp。我们想让合成位于左上角它占据了屏幕75%的高度和40%的宽度。我们需要用以下FormAttachment对象为fillComp创建一个FormData对象:

 如何从屏幕顶部和左侧放置10像素的偏移。通过设置FormLayout的边距字段来消除这个问题。接下来,我们将为RowLayout代码创建名为rowComp的组合。我们想要的这个合成被放置在fillComp下面,我们想让它向左伸展,右边和底部,填满剩下的空间:

 最后,我们将为GridLayout部分创建名为gridComp的组合。我们希望gridComp与底部的fillComp对齐,并在左侧附加到它。我们将延伸到顶部和右侧的边缘:

 

 

 在本例中,每个FormData的所有四方都已定义,这并不总是必要的。如果没有定义一条或多条边,小部件将采用其默认大小并确定其他边的位置。结果窗口:

 

 这个屏幕需要注意的重要一点是它在调整大小时的效果。注意,因为我们在布局中有布局,所以调整大小的效果应用了两次。让我们看看当屏幕变大时会发生什么:

 由于rowComp组合被附加到屏幕的左边和右边,当窗口变大时,组合就会填满空间。rowComp中的RowLayout现在有足够的空间将所有按钮放置在一行中。类似地,gridComp附加到窗口的左侧,因此文本小部件将获取GridLayout提供的额外空间。fillComp复合材料附着在屏幕的40%,随着屏幕变大,复合材料也会变大,所以它总是位于其左侧的40%。当屏幕变小时,也会产生同样的效果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腿毛ger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值