【发布时间】:2016-08-18 00:23:48
【问题描述】:
我的 RCP 应用程序中有一个资源管理器,我在其中添加了一个带有 RowLayout 的内部组合来显示各种类别项。当资源管理器的宽度调整大小时,我希望类别项换行到新行并扩展其父复合的大小。
如果我用默认值初始化我的内部组合,什么都不会发生,甚至不会发生包装。如果我将它设置为抓取垂直空间,它会占用一半空间,将另一半留给树,这很丑陋,不是想要的。如果我设置提示,我会换行,但它的复合大小永远不会改变,因此隐藏了下一行。我尝试添加一个调整大小事件侦听器并调整我的内部复合材料的大小。这允许我调整它的大小并显示所有行,但它会覆盖并隐藏树的一部分。我尝试为树本身做一个 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 来显示您的问题,这将有所帮助。
标签: java eclipse layout resize swt