Как заставить перерисовать содержимое бывшей невидимой группы в SWT? - PullRequest
2 голосов
/ 12 апреля 2009

Я абсолютный новичок в SWT, только начинаю, но ранее я работал с такими GUI-средами, как Swing.

У меня есть Composite, который содержит группу и кнопку. Первоначально для группы задано невидимое (с использованием group.setVisible (false)), и при нажатии на кнопку устанавливается значение «видимый». Это запускает поток, который выполняет некоторые вычисления, обновляя метку внутри группы с прогрессом (вид индикатора выполнения вручную. Это то, что хочет клиент :)).

В любом случае, по какой-то причине, группа появляется только после завершения потока, и я не могу заставить ее появиться, независимо от того, что я использовал (пытался вызвать this.pack (), this.layout (), this.getShell (). layout (), redraw () для различных элементов управления в пути - ничего).

Вот как я создаю группу:

statusGroup = new Group(this, SWT.SHADOW_NONE);
statusGroup.setLayout(null);
statusGroup.setVisible(false);
percentCompleteLabel = new Label(statusGroup, SWT.NONE);
percentCompleteLabel.setText("0% complete");

Вот как я обновляю его из ButtonListener Selection:

this.statusGroup.setVisible(true);
this.statusGroup.pack(true);
this.statusGroup.layout();


this.getShell().layout();

myThreadStartupCode(); // psuedo

while (!workIsDone)  // psuedo
{
   final int progress = myProgressCalcMethod();  // psuedo

   percentCompleteLabel.setText(progress + "% complete");
   percentCompleteLabel.pack(true);

   this.layout();
   this.redraw();

   Thread.sleep(100);
}

Любая подсказка будет оценена.

1 Ответ

1 голос
/ 13 апреля 2009

Видимо, решение заключается в использовании Display.getCurrent().update();

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