我有以下 SWT 布局:
- 选项卡项
- 窗扇
- 复合(网格布局)
- 标签(填充 W,抓取 H)
- ScrolledComposite(填充 W/H,抓取 H/V)
- 复合(行布局)
- 复合(网格布局)
- 标签(填充 W,抓取 H)
- ScrolledComosite(填充 W/H,抓取 H/V)
- 复合(行布局)
- 复合(网格布局)
- 窗扇
总体思路是,两个相同的窗格并排并排,通过窗扇可调节宽度,每个窗格内部顶部有一个标签,底部有一个滚动组合。滚动的复合材料将有许多 (1 - 50) 个 100x100 复合材料包含在包裹的复合材料中。
问题是,当包含在窗扇表单中时,当内部组合由于大量子项而增长时,滚动组合将不会滚动。当我放弃 SashForm 并使用常规 Composite 时,我没有遇到这个问题,如下所示:
- 选项卡项
- 复合(网格布局)
- 标签
- 滚动复合
- 合成的
- 标签
- 滚动复合
- 合成的
- 复合(网格布局)
这样就没有多余的复合容器,一切都在网格布局中。唯一的问题是我无法通过通用界面(窗扇)调整窗格的宽度。
我尝试使用 强制布局layout()
,并使用setMinSize()
. 我尝试用 FlowLayout (swing2swt) 交换 RowLayout。我假设这是一种布局问题,但我没有足够的 SWT 经验来解决它。除了滚动问题之外,布局是完美的。
源示例
所有代码都是由 WindowBuilder Pro 自动生成的,并且可以通过构建我指定的复合树来复制。这是我用来填充包装复合材料的片段:
public void populate(Composite composite, List<Photo> items) {
composite.setRedraw(false);
for (Photo photo : photos) {
PhotoComposite composite = new PhotoComposite(composite, photo, SWT.NONE);
composite.setSize(100, 100);
}
composite.setRedraw(true);
composite.layout(true);
}
Photo 是一个简单的 POJO,而 PhotoComposite 是一个自定义组合,除了传统的 Composite 和 style 位之外,它在构造函数中将 Photo 作为参数。根据我的实验,此代码似乎可以正常工作。