2016-04-24 50 views
0

我在我的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); 
    } 
} 

而这里的图片:

enter image description here

和调整后(注意到,该树的第一行上覆盖了):

enter image description here

+0

这将有助于如果你能发布的[MCVE(http://stackoverflow.com/help/的Compositelayout(true)(甚至layout(true, true) mcve)显示你的问题 – Baz

回答

0

当您正在使用布局调用setSize(或setBounds)将弄乱已经设置的布局。

相反,你应该呼吁拥有两个树和你innerComposite

+0

我尝试过,但没有成功,现在我试图在调整大小监听器中设置高度或最小高度的提示,然后按照你的建议调用布局,但没有任何反应。那正确和正确的地方? –