4

I have a composite(innerComposite) within a ScrolledComposite(sc). At runtime, additional UI components can be added. So I'm using the code below to set the minimum size of the sc to enable scrolling, in case that the additional UI components "overflow" the sc.

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

One issue is with the SWT Multi-Line textfield inside this sc/innerComposite.

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

When I enter a long text into this multi-line textfield, the vertical scrollbar will appear, (which is what I wanted!). However, when I call the code above to recompute the size and setting the sc.setMinSize()...the multi-line textfield's height will expand to fit the length of the text entered. This is not what I wanted. I want this height to remain on with the scrollbar and not resize to fit the text entered.

I know computeSize will cast its children to resize to the preferred size. I don't want this to happen to the multiline textfield as it has the capability of scrolling the vertical bar.

How can I prevent this from happening?

4

3 に答える 3

1

GridLayout解決策はcontent で使用することCompositeです。これにより、テキストにGridDataasを設定することができます。このlayoutDataテキストには、wHint+ hHint(コンポジットで実行するときに使用されます) が含まれますが、このコンポジットに追加のスペースを割り当てるcomputeSize()アクティブ化も可能です。verticalGrab

言い換えれば、GridLayoutedの優先サイズは、その子のからの/をComposite使用します。これにより、余分なスペースが利用可能な場合にテキストを拡張しながら、好みのサイズを設定できます。hHintwHintGridDataTextGridData.verticalGrab

于 2013-01-17T15:09:09.427 に答える
1

問題を解決する別の方法は、独自のカスタム レイアウトを作成し、それを内部コンポジットに設定することです。このようにして、コントロールがどのように表示されるかを正確に制御できます。

于 2012-11-21T03:17:15.210 に答える