2016-04-24 82 views
0

我在我的RCP應用程序中有一個資源管理器,我在其中添加了一個帶有RowLayout的內部組合以顯示各種類別項目。當瀏覽器的寬度調整大小時,我希望類別項目可以換行到新行,並擴大其父組合的大小。SWT佈局如何基於內容調整大小(增長/縮小)

如果我用默認值初始化我的內部組合,沒有任何反應,甚至沒有包裝。如果我把它設置爲搶佔垂直空間,它佔用一半的空間,剩下的一半用於樹,這是醜陋的,而不是想要的。如果我設置提示,我會換行,但其合成的大小不會改變,從而隱藏下一行。我試着添加一個resize事件監聽器並調整我的內部複合。這允許我調整它的大小並顯示所有行,但它會覆蓋並隱藏樹的一部分。我試圖爲樹本身設置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); 
    } 
} 

而這裏的圖片:

enter image description here

和調整後(注意到,該樹的第一行上覆蓋了):

enter image description here

+0

這將有助於如果你能發佈的[MCVE(http://stackoverflow.com/help/的Compositelayout(true)(甚至layout(true, true) mcve)顯示你的問題 – Baz

回答

0

當您正在使用佈局調用setSize(或setBounds)將弄亂已經設置的佈局。

相反,你應該呼籲擁有兩個樹和你innerComposite

+0

我嘗試過,但沒有成功,現在我試圖在調整大小監聽器中設置高度或最小高度的提示,然後按照你的建議調用佈局,但沒有任何反應。那正確和正確的地方? –