2011-12-15 14 views
-4

私はSWTを使用してレイアウトを作成することにかなり慣れています。これは私が enter image description hereSWTレイアウトの作成

を作成する必要があり、これはこれまでのところ、私の試みは何かということです: enter image description here

コード:

private void createContents(final Shell shell) { 
    shell.setLayout(new GridLayout(2,true)); 

    /// Side Panel 
    Composite sideComposite = new Composite(shell, SWT.NONE); 
    sideComposite.setLayout(new RowLayout(SWT.VERTICAL | SWT.BORDER)); 
    Label codeLabel = new Label(sideComposite, SWT.NONE); 
    codeLabel.setText("Folders"); 

    // Create list of folders 
    Composite foldersComposite = new Composite(sideComposite, SWT.NONE); 
    foldersComposite.setLayout(new GridLayout(2,true)); 
    createFoldersComposite(foldersComposite); 

    // Create tags 
    Composite tagsComposite = new Composite(sideComposite, SWT.NONE); 
    tagsComposite.setLayout(new RowLayout()); 
    createTagsComposte(tagsComposite); 

    /// .Side Panel 

    /// Main Panel 
    Composite mainComposite = new Composite(shell, SWT.NONE); 
    mainComposite.setLayout(new RowLayout(SWT.VERTICAL)); 

    // Create search field 
    Composite searchComposite = new Composite(mainComposite, SWT.NONE); 
    searchComposite.setLayout(new GridLayout(2,true)); 

    Label searchLabel = new Label(searchComposite, SWT.NONE); 
    searchLabel.setText("Search"); 
    GridData gridData = new GridData(); 
    gridData.horizontalSpan = 1; 
    searchLabel.setLayoutData(gridData); 

    Text searchText = new Text(mainComposite, SWT.BORDER | SWT.V_SCROLL); 
    searchLabel.setLayoutData(gridData); 

    // Create search result 
    Composite resultComposite = new Composite(mainComposite, SWT.BORDER); 
    resultComposite.setLayout(new GridLayout(2,true)); 
    createResultComposite(resultComposite); 

    // Code Review 
    Text codeText = new Text(mainComposite, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); 
    codeText.setSize(500, 500); 


    /// .Main Panel 
} 

質問:どのように私は、正確なレイアウトを持つことが、私の既存のコードを修正することができますが欲しいです ?

+1

何が質問ですか? –

答えて

1

一度にすべてのレイアウトを処理しようとするモノリシックなコントロールではなく、別のウィジェットに分解すると便利です。これにより、別々のコンポーネントごとにレイアウトを正しく設定し、一度に1つずつ作成して、必要な全体的なレイアウトを得ることができます。

これはあなたのサンプルコードでは特に顕著です - あなたは2列GridLayoutsearchCompositeと呼ばCompositeを作成している、とあなたはその複合材料にsearchLabelを追加しています。しかし、searchTextmainCompositeを追加しています。これはあなたが意図したものではないと思います。

代わりにLabelTextを含む2列のGridLayoutを持つSearchControlを作成します。 TextGridDataは、対照の残りの部分を満たすにはgrabExcessHorizontalSpaceでなければなりません。

GridLayoutGridDataをよく知っていることをお勧めします。実験するのを恐れないでください。たとえば、trueを常にGridLayoutコンストラクタに渡すと、列の一致幅が作成されます。これは完全に合理的ですが、いくつかの列が互いにより広いところでスケッチしたレイアウトと一致しません。また、私はGridDataFactoryを見ることをお勧めします。それはすべてのGridDataをワンライナーに変えるでしょう。

+0

「これを分割してウィジェットを分割するのですか?」別の機能を作成する必要がありますか? GridDataFactoryは本当に素晴らしいです:) – nXqd

関連する問題