6

SWT を使用したテキスト フィールドがある場合、フィールドを 100% または指定した幅にするにはどうすればよいですか。

たとえば、このテキスト フィールドは水平方向にしか届きません。

public class Tmp {
    public static void main (String [] args) {
        Display display = new Display ();
        Shell shell = new Shell (display);
        GridLayout gridLayout = new GridLayout ();
        shell.setLayout (gridLayout);

        Button button0 = new Button(shell, SWT.PUSH);
        button0.setText ("button0");

        Text text = new Text(shell, SWT.BORDER | SWT.FILL);
        text.setText ("Text Field");

        shell.setSize(500, 400);
        //shell.pack();
        shell.open();

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

2 に答える 2

5

コンポーネント内の要素の配置は、使用しているレイアウト オブジェクトによって異なります。提供されているサンプルでは、​​GridLayout を使用しています。つまり、コンポーネントをどのように表示するかを示すために、特定の LayoutData オブジェクトを提供する必要があります。GridLayout の場合、オブジェクトは GridData です。

目的を達成するには、すべての水平スペースを取得して埋める GridData オブジェクトを作成する必要があります。

// Fills available horizontal and vertical space, grabs horizontal space,grab
// does not  grab vertical space
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false);
text.setLayoutData(gd);

別の方法として、FormLayout などの別の LayoutManager を使用する方法があります。このレイアウトでは FormData オブジェクトを使用して、コンポーネントを画面に配置する方法を指定することもできます。

また、レイアウトに関するこの記事を読んで、レイアウトの仕組みを理解することもできます

ちなみに、コンストラクタ new GridData(int style) はドキュメントで「非推奨」とマークされています。代わりに、この例に示されている明示的なコンストラクターを使用することをお勧めします。

于 2009-01-12T11:32:10.330 に答える
5

次のようにします。

Text text = new Text(shell, SWT.BORDER);
text.setText ("Text Field");
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER));

/: これは受け入れられた回答なので、エラーを削除します。私を修正してくれてありがとう。

于 2009-01-12T08:26:12.140 に答える