Java SWT: ширина метки не меняется после изменения текста

Я много читал об этой проблеме здесь, в Stack Overflow, и применил все предложенные решения (пакет getShell, макет, макет getparent и т. д.), и ни одно из них не сработало.

У меня есть метка с текстовым значением. Также у меня есть кнопка, и при нажатии на эту кнопку я меняю содержимое метки на более длинный текст. Проблема в том, что ширина метки не меняется и видна только часть нового более длинного текста.

Мой текстовый код:

Composite composite_2 = new Composite(this, SWT.NONE);
composite_2.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true, 1, 1));
composite_2.setLayout(new GridLayout(2, false));

Label lblNumbers = new Label(composite_2, SWT.NONE);
lblNumbers.setText("Números:");

Label lblNumbersValue = new Label(composite_2, SWT.NONE);   
lblNumbersValue.setText("...");

. . .

btnElegirNmeros.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        lblNumbersValue.setText("asddadadasdasdasd");
        lblNumbersValue.getParent().layout();
        lblNumbersValue.pack();
        getShell().pack();
        getShell().layout();
    }
});

person NullPointerException    schedule 23.09.2018    source источник
comment
Я не могу воспроизвести проблему, не могли бы вы предоставить минимальный воспроизводимый пример? Если все настроено правильно, этого должно быть достаточно для выполнения lblNumbersValue.requestLayout();.   -  person Loris Securo    schedule 23.09.2018
comment
это сработало! @LorisSecuro, пожалуйста, опубликуйте это как ответ, и я приму его. requestLayout решил проблему   -  person NullPointerException    schedule 23.09.2018


Ответы (1)


Начиная с версии SWT 4.6, наиболее надежным способом запуска обновления макета является Control.requestLayout().

Это должно решить такие проблемы.

Итак, в вашем случае попробуйте lblNumbersValue.requestLayout();.

person Loris Securo    schedule 23.09.2018