我有以下SWT布局:

  • TabItem
    • SashForm
      • 复合(GridLayout)
        • 标签(填充W,抓取H)
        • 滚动复合(填充W / H,抓取H / V)
          • 复合(RowLayout)
      • 复合(GridLayout)
        • 标签(填充W,抓取H)
        • ScrolledComosite(W / H填充,H / V抓取)
          • 复合(RowLayout)

总体思路是,有两个相同的窗格并排放置,并通过窗扇可调节宽度,每个窗格内部的顶部是标签,底部是滚动的复合材料。 滚动的复合材料将在包装的复合材料中包含许多(1-50)100x100复合材料。

问题是,当包含在窗框形式中时,由于内部子对象数量众多,滚动复合对象将不会滚动。 当我放弃SashForm并使用常规Composite时,我没有遇到此问题,如下所示:

  • TabItem
    • 复合(GridLayout)
      • 标签
      • 滚动复合
        • 综合
      • 标签
      • 滚动复合
        • 综合

这样,就没有多余的复合容器,并且所有内容都在网格布局中。 唯一的问题是我无法通过公共界面(窗扇)来调整窗格的宽度。


我尝试使用layout()强制布局,并使用setMinSize()设置最小大小。 我尝试将RowLayout与FlowLayout(swing2swt)交换。 我假设这是一种布局问题,但是我没有足够的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作为构造函数中的参数。 根据我的实验,此代码似乎正常工作。

#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));
}

  ask by Chris Hutchinson translate from so

未解决问题?本站智能推荐:

1回复

ScrolledComposite在设置为展开时不显示滚动条

我的问题是,如果我的滚动复合材料有 它在整个ViewPart上正确扩展,但如果我收缩View,则不会出现滚动条。 如果我没有设置展开,则滚动条会出现,但滚动的复合材料内的整个复合材料不会展开。 有人知道如何设置Composite以扩展到我的整个视图,但是当视图缩小时还会显示滚动条吗?
1回复

SWTSash/SashForm镜像

我尝试在水平SashForm(Parent)中实现上层和下层SashForms(Children A和B)。 我希望能够拖动其中一个孩子(孩子A)的(垂直)窗扇,并让另一个孩子(孩子B)的(垂直)窗扇完全模仿A的水平位置。为此,我尝试了一个破解创建一个暴露SashForms框格的'Modifi
1回复

SWT:使用ScrolledComposite的嵌套布局超出可用空间

我想使用SWT为我的一个应用程序构建一个Master-Detail布局。 Container,Content,Sidebar和Part1是Composite实例。 滚动是ScrolledComposite 所需的布局是这样的: 内容应该可以水平和垂直地抓取所有空间。 侧边栏基本
1回复

SWT在组中创建滚动复合

我想创建一个包含2个组的组合。 2组与复合材料的宽度相同,并且可以调整大小。 Group1包含一个可滚动的Composite。 此可滚动复合图像的固定高度为400,包含20个文本字段==> show V_SCROLL Group2包含一个文本字段,高度将是动态的,最小大小为10
1回复

WizardDialog中的StackLayout和具有固定高度并动态显示滚动条的多行文本

我正在使用向导,如果发生错误,该控件应该在控件顶部显示一个错误复合信息。 该组合包含一个列出所有错误的Text以及此组件上方和下方的两个Label 。 错误列表下方的Label可以省略。 根据错误的数量,错误列表的高度应有所不同。 但是,它不应超过父组合的高度。 如果错误无法完全显示在
1回复

如何在gridlayout中使用滚动复合启用滚动?

如果我使用外壳,下面的代码工作正常。 但我使用的复合材料无法正常工作。 如果使用shell,代码可以正常工作: 如果在gridlayout中使用Composite,则相同的代码将无法正常工作:
1回复

SWTScrollableComposite填充文本,想要水平包装并垂直滚动

我已经设置了一个ScrolledComposite来占据我的外壳的整个区域,并且在其中的水平RowLayout有多个Labels。 我想这样做,以便在调整窗口大小时,文本始终会一直延伸到整个窗口,但现在它只是保持其原始宽度。 最重要的是,文本在换行之前似乎位于滚动条的后面。
3回复

布局中的SWT复合排序

我有一个包含两个子组合的组合 当用户单击按钮时,如何更改这两个组合的顺序? 结果应为: 谢谢西蒙