SWT - 用于ScrolledComposite内的多行文本字段的computingSize

时间:2012-10-11 07:36:16

标签: java eclipse swt scrolledcomposite

我在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会将其子项调整为首选大小。我不希望这种情况发生在多行文本字段中,因为它具有滚动垂直条的功能。

如何防止这种情况发生?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

解决方案是在内容GridLayout中使用Composite。这允许您在包含GridData + layoutData的文本上设置wHinthHint(在复合时执行computeSize()时使用)但仍然会激活verticalGrab,这会将任何额外空间归因于此合成。

换句话说:GridLayout ed Composite的首选尺寸使用其子版hHint的{​​{1}} / wHint。这样,您可以设置GridData的首选大小,同时如果有额外空间可用,则仍然使用Text展开文字。

答案 2 :(得分:0)

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