我在我的RCP应用程序中有一个资源管理器,我在其中添加了一个带有RowLayout的内部组合以显示各种类别项目。当浏览器的宽度调整大小时,我希望类别项目可以换行到新行,并扩大其父组合的大小。SWT布局如何基于内容调整大小(增长/缩小)
如果我用默认值初始化我的内部组合,没有任何反应,甚至没有包装。如果我把它设置为抢占垂直空间,它占用一半的空间,剩下的一半用于树,这是丑陋的,而不是想要的。如果我设置提示,我会换行,但其合成的大小不会改变,从而隐藏下一行。我试着添加一个resize事件监听器并调整我的内部复合。这允许我调整它的大小并显示所有行,但它会覆盖并隐藏树的一部分。我试图为树本身设置setLocation和setSize来移动/调整它的大小,但无济于事,它不会改变。
这怎么能工作。我错过了什么。是不是有一种简单的方法来要求布局,将使用最低要求的高度,没有更多,但如果需要调整?
感谢您的帮助。
下面的代码:
innerComposite = new Composite(parent, SWT.NONE);
innerComposite.addListener(SWT.Resize, listenerComp);
GridDataFactory.fillDefaults().hint(10, 30).applyTo(innerComposite);
GridLayoutFactory.fillDefaults().applyTo(innerComposite);
Listener listenerComp = new Listener() {
public void handleEvent(Event event) {
Widget widget = event.widget;
Composite comp = (Composite)widget;
Composite parent = comp.getParent();
Point parentSize = parent.getSize();
Point size = comp.computeSize(parentSize.x, SWT.DEFAULT);
comp.setSize(size);
}
}
而这里的图片:
和调整后(注意到,该树的第一行上覆盖了):
这将有助于如果你能发布的[MCVE(http://stackoverflow.com/help/的
Composite
layout(true)
(甚至layout(true, true)
mcve)显示你的问题 – Baz