我有以下SWT布局:
一般的想法是,有两个相同的窗格并排通过窗框可调节宽度,每个面板内部是顶部的标签,底部是滚动的复合材料。滚动的复合材料将包含许多(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和样式位之外,它还将Photo作为构造函数中的参数。根据我的实验,此代码似乎工作正常。
答案 0 :(得分:0)
事实证明问题是对setMinSize(int, int)
的误解。上面显示的populate方法的以下更改为我解决了问题:
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));
}