5

既存のコンポジットからビューを構築しようとしている RCP/SWT アプリケーションがあります。1 つは FillLayout コンポジットで、もう 1 つは GridLayout を使用します。

最終的に、GridLayout コンポジットが FillLayout コンポジット (垂直バナーと考え​​てください) の左側に配置され、ビュー全体の幅の約 10% であるビューになりたいと思います。既存の FillLayout コンポジットは、他の 90 パーセント。

SWT でレイアウトを組み合わせることができるかどうかはわかりませんが、2 列の GridLayout のようなものを考えています。列 1 には GridLayout ウィジェットが含まれ、列 2 には FillLayout コンポジットが含まれます。これは SWT で実行できますか? もしそうなら、これはコード的にどのように見えますか?

ありがとう-

4

2 に答える 2

7

FormLayoutaを外側のコンポジットに設定し始めます。その中に他の 2 つのコンポジットを配置し、それらのFormData情報を設定して好きなように配置します。次に、これら2つのコンポジットのレイアウトを設定します(あなたが言ったように、グリッドとフィル)。

開始するコードを次に示します。それが何を生成するかを示す画像があります。また、Eclipse のSWT Layoutsビューも確認してください。

Shell shell = new Shell();

FillLayout fillLayout = new FillLayout();
fillLayout.marginHeight = 5;
fillLayout.marginWidth = 5;
shell.setLayout( fillLayout );

Composite outer = new Composite( shell, SWT.BORDER );
outer.setBackground( new Color( null, 207, 255, 206 ) ); // Green

FormLayout formLayout = new FormLayout();
formLayout.marginHeight = 5;
formLayout.marginWidth = 5;
formLayout.spacing = 5;
outer.setLayout( formLayout );

Composite innerLeft = new Composite( outer, SWT.BORDER );
innerLeft.setLayout( new GridLayout() );
innerLeft.setBackground( new Color( null, 232, 223, 255 ) ); // Blue

FormData fData = new FormData();
fData.top = new FormAttachment( 0 );
fData.left = new FormAttachment( 0 );
fData.right = new FormAttachment( 10 ); // Locks on 10% of the view
fData.bottom = new FormAttachment( 100 );
innerLeft.setLayoutData( fData );

Composite innerRight = new Composite( outer, SWT.BORDER );
innerRight.setLayout( fillLayout );
innerRight.setBackground( new Color( null, 255, 235, 223 ) ); // Orange

fData = new FormData();
fData.top = new FormAttachment( 0 );
fData.left = new FormAttachment( innerLeft );
fData.right = new FormAttachment( 100 );
fData.bottom = new FormAttachment( 100 );
innerRight.setLayoutData( fData );

shell.open();

コード出力

于 2013-05-31T12:25:29.553 に答える
2

次のコードを出発点として使用できます。

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, false));

    SashForm form = new SashForm(shell, SWT.HORIZONTAL);
    form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Composite left = new Composite(form, SWT.BORDER);
    left.setLayout(new GridLayout(3, true));
    left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for(int i = 0; i < 9; i++)
    {
        Button button = new Button(left, SWT.PUSH);
        button.setText("Button " + i);
        button.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
    }

    final Composite right = new Composite(form, SWT.BORDER);
    right.setLayout(new GridLayout(1, true));
    right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Button fillButton = new Button(right, SWT.PUSH);
    fillButton.setText("Fill");
    fillButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    /* Set the width to 80% and 20% */
    form.setWeights(new int[] {4, 1});

    shell.setSize(400, 400);
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

次のようになります。

ここに画像の説明を入力


基本的SashFormに2部構成です。左の部分はGridLayout3 列の で、右の部分はGridLayout1 列の です。sを混ぜる必要はありませんLayout

パーセンテージはform.setWeights(new int[] {4, 1});

于 2013-05-31T06:58:59.013 に答える