如何在SWT中强制重绘一个前隐形组的内容?

时间:2009-04-12 15:21:19

标签: java swt

我是SWT中的总菜鸟,刚入门,但我以前使用过Swing这样的GUI框架。

我有一个包含Group和Button的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");

以下是我如何从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);
}

任何线索都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

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