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

ボタンの 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 に答える