Как обернуть текст в Label без указания высоты элемента

Проблема в том, что я не могу установить высоту метки. Для длинного текста моя метка должна иметь высоту в 2 строки, а для короткого текста — только 1 строку. Есть пример кода:

public MyComposite(Composite parent) {
    super(parent, SWT.NONE);
    setLayout(new GridLayout(1, false));

    description = new Label(this, SWT.WRAP);
    description.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
    description.setText("Looooooooooooooooooooooooooooooooooooooo" + 
    "oooooooooooooooooooooooooooooooooooooooooooooooooooooo" + 
    "ooooooooooooooooooooooooooooooooooooong text");
}

person Paul    schedule 14.12.2015    source источник


Ответы (1)


Чтобы включить обтекание текста в GridLayout, необходимо установить для третьего параметра GridData (grabExcessHorizontalSpace) значение true. Также убедитесь, что размер родительского композита определяется его layoutData, иначе он будет расширен меткой. В следующем фрагменте текст метки обернут:

Shell shell = new Shell( parentShell );
shell.setSize( 400, 300 );
shell.setLayout( new GridLayout(1, false) );
Label description = new Label(shell, SWT.WRAP);
description.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
description.setText("Looooooooooooooooooooooooooooooooooooooo" +
    "oooooooooooooooooooooooooooooooooooooooooooooooooooooo" +
    "ooooooooooooooooooooooooooooooooooooong text");
shell.open();

Также обратите внимание, что перенос реализован как перенос слов, очень длинная последовательность символов, отличных от пробелов, не будет разбита на строки.

person ralfstx    schedule 14.12.2015
comment
Спасибо! И я обнаружил, что очень длинная последовательность непробельных символов может быть разделена текстовым виджетом только для чтения. - person Paul; 15.12.2015