4

我在 ScrolledComposite(sc) 中有一个复合材料(innerComposite)。在运行时,可以添加额外的 UI 组件。因此,我使用下面的代码来设置 sc 的最小大小以启用滚动,以防其他 UI 组件“溢出”sc。

sc.setMinSize(
    innerComposite.computeSize(
        innerComposite.getSize().x, SWT.DEFAULT
    )
);

一个问题是这个 sc/innerComposite 中的 SWT 多行文本字段。

textBox = new org.eclipse.swt.widgets.Text(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);

当我在这个多行文本字段中输入长文本时,会出现垂直滚动条(这就是我想要的!)。但是,当我调用上面的代码重新计算大小并设置 sc.setMinSize() 时...多行文本字段的高度将扩展以适应输入文本的长度。这不是我想要的。我希望这个高度保持在滚动条上,而不是调整大小以适应输入的文本。

我知道computeSize会将其子项转换为首选大小。我不希望这种情况发生在多行文本字段上,因为它具有滚动垂直条的能力。

我怎样才能防止这种情况发生?

4

3 回答 3

1

解决方法是GridLayout在内容中使用Composite。这允许您在包含一个+的文本上设置 a GridDataas (在复合材料上执行时使用),但仍然激活它将为该复合材料分配任何额外的空间。layoutDatawHinthHintcomputeSize()verticalGrab

换句话说:GridLayouted的首选大小Composite使用其子级的hHint/wHint中的 / GridData。这允许您设置您的首选大小,同时在有额外空间可用Text的情况下仍使用扩展文本。GridData.verticalGrab

于 2013-01-17T15:09:09.427 回答
1

解决您的问题的另一种方法是编写您自己的自定义布局并将其设置为您的内部合成。通过这种方式,您可以准确控制控件的显示方式。

于 2012-11-21T03:17:15.210 回答
0

我通过设置宽度/高度解决了这个问题!

于 2012-11-21T06:55:41.733 回答