0

SWT でネストされた 2 つのコンポジットの上側の間隔を変更することはできますか?

たとえば、以下のコードを使用すると、次のような結果が得られます。

ここに画像の説明を入力

ここに示すように、赤と青のコンポジットの上面の間にスペースがないようにしたいと思います。

ここに画像の説明を入力

( を使用して) 2 つのコンポーネントの高さを同じにしようとしましたGridDataが、うまくいきませんでした。

public class CompositeSnippet
{
public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);

    shell.setLayout(new GridLayout());

    Composite c1 = new Composite(shell, SWT.NONE);
    GridData c1GridData = new GridData(100, 50);
    c1.setLayoutData(c1GridData);
    c1.setLayout(new GridLayout());
    c1.setBackground(display.getSystemColor(SWT.COLOR_BLUE));


    Composite c2 = new Composite(c1, SWT.NONE);
    GridData c2GridData = new GridData(50, 50);
    c2.setLayoutData(c2GridData);
    c2.setBackground(display.getSystemColor(SWT.COLOR_RED));

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

}

SWT のレイアウトに関するこの記事に基づくと、この間隔は青色のコンポジットのトリミングが原因である可能性があります。Composite を拡張してメソッドをオーバーライドする独自のカスタム ウィジェットを作成しようとしましたcomputeTrim(...)が、それも機能しませんでした...

PSこの質問はすでに尋ねられているようですが、 stackoverflowに関連するものは見つかりませんでした。これがすでに解決されている場合は、適切なディスカッションを教えてください。投稿が重複していることをお詫びします。

4

2 に答える 2

0

GridLayout.marginHeightコンポジット c1 の を 0に設定する必要があります。

public class CompositeSnippet
{
public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);

    shell.setLayout(new GridLayout());

    Composite c1 = new Composite(shell, SWT.NONE);
    GridData c1GridData = new GridData(100, 50);
    c1.setLayoutData(c1GridData);

    //Set marginWidth and marginHeight of parent composite to 0
    GridLayout c1Layout = new GridLayout();
    c1Layout.marginHeight = 0;
    c1.setLayout(c1Layout);
    c1.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

    Composite c2 = new Composite(c1, SWT.NONE);
    GridData c2GridData = new GridData(50, 50);
    c2.setLayoutData(c2GridData);
    c2.setBackground(display.getSystemColor(SWT.COLOR_RED));

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

ここに画像の説明を入力

于 2013-10-18T20:03:24.897 に答える