2012-10-11 14 views
4

我有一個ScrolledComposite(SC)內的複合物(innerComposite)。在運行時,可以添加其他UI組件。因此,我使用下面的代碼來設置sc的最小大小以啓用滾動,以防其他UI組件「溢出」sc。SWT - computingSize爲多行文本字段內ScrolledComposite

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會將其子女調整爲首選大小。我不希望這種情況發生在多行文本框中,因爲它具有滾動垂直條的功能。

我該如何防止這種情況發生?

+0

研究了一下,我不得不說這看起來絕望。你不能重寫'Text'的'computeSize'方法,因爲子類是不允許的。 Layout的'computeSize'方法調用佈局,這是一個**巨大的**方法。我看到的唯一可能是重寫這個'layout'方法(它遍歷它的子節點)並忽略任何帶有'SWT.MULTI'風格的'Text'。 – Baz

回答

1

解決你的問題是寫自己的自定義佈局和設置,爲您的內部複合材料的另一種方法。通過這種方式,您可以精確控制控件的顯示方式。

0

我通過設置寬度/高度解決了這個問題!

+0

您是如何計算所需尺寸的? – Link19

1

的解決方案是在內容Composite使用GridLayout。這允許您在包含wHint + hHint(在複合材料上執行computeSize()時使用)但仍然激活verticalGrab的文本上設置GridDatalayoutData,該文本將爲該複合材料分配任何額外空間。

在換言之:GridLayout的優選大小編Composite使用來自其子的GridData的所述hHint/wHint。這允許您設置首選尺寸Text,同時仍然使用GridData.verticalGrab擴展文本(如果有額外空間可用)。