2016-04-24 25 views
0

RCPアプリケーションにエクスプローラーを配置し、RowLayoutを使用してさまざまなカテゴリ項目を表示する内部コンポジットを追加しました。エクスプローラの幅を変更すると、カテゴリ項目を新しい行に折り返して、親コンポジットのサイズを拡大します。内容に基づいてSWTレイアウトのサイズを変更(拡大/縮小)する方法

内側のコンポジットをデフォルトで初期化すると、何も起こりません。ラッピングさえしません。私が垂直のスペースをつかむように設定すると、半分のスペースが必要になり、ツリーの残りの半分は残ってしまいます。これは醜いもので、必要なものではありません。ヒントを設定すると、ラップしますが、コンポジットのサイズは決して変更されないため、次の行が隠されます。 resizeイベントリスナーを追加し、内側のコンポジットのサイズを変更しようとしました。それは私がそれをサイズ変更し、すべての行を表示することができますが、その後、ツリーの一部を覆い隠します。私はsetLocationとsetSizeを実行して木自体のサイズやサイズを変更しようとしましたが、無駄な変更はありません。

これをどのように機能させることができますか?私は何が欠けている。必要最低限​​の高さを使用し、必要以上に調整するレイアウトを求める簡単な方法はありませんか?

ありがとうございました。ここで

コード:

enter image description here

そして、リサイズ後(樹の1行目が隠蔽されていることに気付い):

ここ

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

+0

あなたは[MCVE]を投稿することができればそれが役立つだろう(http://stackoverflow.com/help/ – Baz

答えて

0

setSize(またはsetBounds)を呼び出しているレイアウトを使用していると、設定済みのレイアウトが壊れてしまいます。

代わりにあなたがツリーとあなたのinnerCompositeの両方を所有しているCompositelayout(true)(あるいはlayout(true, true)を呼び出す必要があります。

+0

私は成功しましたが、成功しませんでした。今は、リサイズリスナーの高さまたは最小高さのヒントを設定しようとしていますが、提案したようにレイアウトを呼び出しても何も起こりません。それは正しい場所にありますか? –

関連する問題