Почему композит расширяется текстовым полем? - PullRequest
0 голосов
/ 29 ноября 2018

Я создал текстовое поле, которое использовало GridLayout, и я установил для 3-го параметра GridData (grabExcessHorizontalSpace) значение true.Поле Text не переносится на несколько строк, когда я установил очень длинную последовательность непробельных символов, которые не будут разбиты на строки.Composite расширен текстовым полем.

Ниже мой код:

Composite composite = new Composite(m_shell, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
composite.setLayout(new GridLayout(2, false));

Label label = new Label(composite, SWT.LEAD);
label.setText("Label");
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));

Text text = new Text(composite,SWT.MULTI|SWT.BORDER|SWT.WRAP|SWT.V_SCROLL);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd.heightHint = 2 * text.getLineHeight();
text.setLayoutData(gd);
text.setText("trweghjfbfdshjfghjreuyhjfghkjhjhjsdghjreewhjdfghjhjgfdhjsdghjtreuytrehjdfghjhjdfgh8irtrhjghjhjdfghjdfghjfghjdfg");

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Установка widthHint в 0 вместе с horizontalAlignment в SWT.FILL заставляет текст заполнять все доступное пространство в его столбце, но не увеличивается больше, чем это.Вместо этого он оборачивается по желанию:

Screenshot

Я пробовал это в Windows 10 с SWT 3.103.2.Грег, похоже, получил другой результат на Mac.

Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());

Composite composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
composite.setLayout(new GridLayout(2, false));

Label label = new Label(composite, SWT.LEAD);
label.setText("Label");
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));

Text text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd.heightHint = 2 * text.getLineHeight();

// Added widthHint
gd.widthHint = 0;
text.setLayoutData(gd);
text.setText("trweghjfbfdshjfghjreuyhjfghkjhjhjsdghjreewhjdfghjhjgfdhjsdghjtreuytrehjdfghjhjdfgh8irtrhjghjhjdfghjdfghjfghjdfg");

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

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

display.dispose();
0 голосов
/ 29 ноября 2018

Я предполагаю, что вы звоните pack на Shell, чтобы завершить макет.Это приводит к тому, что размеры элементов управления будут соответствовать их предпочтительному размеру - предпочтительный размер элемента управления Text - это размер без переноса.

Если вы хотите, чтобы оболочка имела определенный размер, вы можете layout наОболочка без вызова pack.Затем текст следует перенести.

В качестве альтернативы укажите widthHint для элемента управления Text.

...