1

SWTを使って簡単なディスプレイを作ろうとしています。これまでのところ、データベースからの情報を正常に表示し、RowLayout を使用して表示しています。各行には GridLayout が含まれています。次のようになります。

ここに画像の説明を入力

私が本当に欲しいのは、ウィンドウの全幅を占めるように行を拡張することです。どうすればこれを達成できますか?

ご協力いただきありがとうございます!

4

1 に答える 1

7

これを実現する通常の方法は、 を使用することGridDataです。これGridDataは、コンポーネントがその親内でどのように動作するか (たとえば、親全体に広がる方法) をコンポーネントに伝えます。

以下を使用して:

component.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

コンポーネントが水平方向にできるだけ多くのスペースを占有するように指示しますが、垂直方向には必要なスペースのみを占有します。

以下は、期待どおりに動作する小さな例です。

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

        /* GridLayout for the Shell to make things easier */
        shell.setLayout(new GridLayout(1, false));

        for(int i = 0; i < 5; i++)
        {
            createRow(shell, i);
        }

        shell.pack();
        shell.open();

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

    private static void createRow(Shell shell, int i)
    {
        /* GridLayout for the rows, two columns, equal column width */
        Composite row = new Composite(shell, SWT.NONE);
        row.setLayout(new GridLayout(2, true));

        /* Make each row expand horizontally but not vertically */
        row.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

        /* Create the content of the row, expand horizontally as well */
        Button first = new Button(row, SWT.PUSH);
        first.setText("FIRST " + i);
        first.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        Button second = new Button(row, SWT.PUSH);
        second.setText("SECOND " + i);
        second.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
    }
}

起動後はこんな感じ。

ここに画像の説明を入力

サイズ変更後:

ここに画像の説明を入力


余談ですが、まだ読んでいない場合は、レイアウトに関する Eclipse のチュートリアルを読むことをお勧めします。すべての SWT 開発者は読むべきです。

于 2013-03-28T21:42:23.983 に答える