0

我有以下 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 作为参数。根据我的实验,此代码似乎可以正常工作。

4

1 回答 1

0

事实证明,问题是对setMinSize(int, int). 对上面显示的填充方法的以下更改为我解决了这个问题:

public void populate(ScrolledComposite scroll, 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);

   scroll.setMinSize(composite.computeSize(scroll.getSize().x, SWT.DEFAULT));
}
于 2012-09-17T13:51:29.313 回答