web-dev-qa-db-ja.com

SWTのコンポーネントのサイズを自動サイズ変更するにはどうすればよいですか?

私のSWTアプリケーションでは、SWTシェル内に特定のコンポーネントがあります。

次に、表示ウィンドウのサイズに応じて、このコンポーネントのサイズを自動変更するにはどうすればよいですか。

Display display = new Display();

Shell shell = new Shell(display);
Group outerGroup,lowerGroup;
Text text;

public test1() {
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns=1;
    Shell.setLayout(gridLayout);

    outerGroup = new Group(Shell, SWT.NONE);

    GridData data = new GridData(1000,400);
    data.verticalSpan = 2;
    outerGroup.setLayoutData(data);    

    gridLayout = new GridLayout();

    gridLayout.numColumns=2;
    gridLayout.makeColumnsEqualWidth=true;
    outerGroup.setLayout(gridLayout);

    ...
}

つまり、ウィンドウのサイズを小さくすると、ウィンドウ内のコンポーネントがそれに応じて表示されるはずです。

9
Durgesh Sahu

レイアウトを使用していないように思われます。

レイアウトの全体的な概念により、サイズ変更について心配する必要がなくなります。レイアウトは、そのすべてのコンポーネントのサイズを処理します。

レイアウトに関するEclipseの記事を読むことをお勧めします

コードは簡単に修正できます。個々のコンポーネントのサイズを設定しないでください。レイアウトによってサイズが決まります。ウィンドウに事前定義されたサイズを設定する場合は、シェルのサイズを設定します。

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

    Group outerGroup = new Group(Shell, SWT.NONE);

    // Tell the group to stretch in all directions
    outerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    outerGroup.setLayout(new GridLayout(2, true));
    outerGroup.setText("Group");

    Button left = new Button(outerGroup, SWT.Push);
    left.setText("Left");

    // Tell the button to stretch in all directions
    left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Button right = new Button(outerGroup, SWT.Push);
    right.setText("Right");

    // Tell the button to stretch in all directions
    right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Shell.setSize(1000,400);
    Shell.open();

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

サイズ変更前:

Before resizing

サイズ変更後:

After resizing

29
Baz