1

ここでの SWT Composite オブジェクトの通常/一般的な慣行は何かを知りたいです。

Composite を追加するたびに (UI の例: TextBox または Button)、Composite 内で作成された UI が Composite の最初の端に揃えられないことがわかりました。(これは、コンポジットの背景色を設定することで確認できます)

TextBox UI の前の Composite 内にスペース/パディングがあります。以前の UI がコンポジット内で作成されていない場合、これにより、作成中の GUI フォームにずれが生じます。

それらを一致させるための一般的な慣行は何ですか?負のパディングを設定してコンポジットを後方に移動し、その中の UI が整列しているように見えるようにしますか?

以下サンプルコード!

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

        Text t1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
        t1.setText("Test box...");

        Composite c = new Composite(shell, SWT.NONE);
        // c.setBackground(new Color(shell.getDisplay(), 255,0,0));
        layout = new GridLayout();
        layout.numColumns = 2;
        layout.makeColumnsEqualWidth = true;
        c.setLayout(layout);

        Text t2 = new Text(c, SWT.SINGLE | SWT.BORDER);
        t2.setText("Test box within Composite... not aligned to the first textbox");

        Button b = new Button(c, SWT.PUSH);
        b.setText("Button 1");

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

2 に答える 2

6

これで修正されます:

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

    Text t1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
    t1.setText("Test box...");

    Composite c = new Composite(shell, SWT.NONE);
    GridLayout layout = new GridLayout(2, true);

    layout.marginWidth = 0; // <-- HERE

    c.setLayout(layout);

    Text t2 = new Text(c, SWT.SINGLE | SWT.BORDER);
    t2.setText("Test box within Composite... not aligned to the first textbox");

    Button b = new Button(c, SWT.PUSH);
    b.setText("Button 1");

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

marginWidthifGridLayoutをに設定するだけ0です。

ここに画像の説明を入力

ヒント: のコンストラクターで、列数と等幅のものを設定できますGridLayout

于 2012-10-17T08:10:11.610 に答える
1

GridLayoutそれに関連付けられたデフォルトのマージンがあります。この記事を読むことをお勧めします

http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html

于 2012-10-17T05:51:05.333 に答える