Как текстовые поля заполнить на 100% по горизонтали - PullRequest
6 голосов
/ 12 января 2009

Если у меня есть текстовое поле с 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 ();
    }
}

Ответы [ 2 ]

5 голосов
/ 12 января 2009

Позиционирование элементов в Компоненте зависит от объекта Layout, который вы используете. В приведенном примере вы используете 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);

Альтернативные способы включают использование другого LayoutManager, например FormLayout. В этом макете используется объект FormData, который также позволяет указать, как компонент будет размещен на экране.

Вы также можете прочитать эту статью о макетах, чтобы понять, как работают макеты .

В качестве примечания, конструктор new GridData (int style) помечен как «не рекомендуемый» в документации. Вместо этого предпочтителен явный конструктор, показанный в этом примере.

5 голосов
/ 12 января 2009

Сделайте что-то вроде этого:

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

/: Так как это принятый ответ, я устраняю ошибки. Спасибо за поправку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...