2

我是 SWT 的菜鸟,刚刚开始,但我之前曾使用过诸如 Swing 之类的 GUI 框架。

我有一个组合,其中包含一个组和一个按钮。Group 最初设置为不可见(使用 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");

以下是我从 Button 的 SelectionListener 更新它的方法:

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);
}

任何线索将不胜感激。

4

1 回答 1

1

显然,解决方案是使用Display.getCurrent().update();

于 2009-04-13T06:25:22.503 回答