ProgressMonitor ウィンドウは (必要に応じて 2 秒後に) 自己起動され、いつ、どのように開くかを制御できないため、その方法がわかりません。したがって、バックグラウンドで開く方法がわからないため、焦点はメインの JFrame にとどまります。
MyFile file = panel.getFilesystem().getFile(panel.getDirectory()+fileName);
if(file.isDirectory()){
final ProgressMonitor monitor = new ProgressMonitor((Component)event.getSource(),
"Determining the size of "+file.getName(), "Initializing...", 0, 100);
monitor.setMillisToPopup(500);
monitor.setMillisToDecideToPopup(200);
final DirectorySizeWorker worker = new DirectorySizeWorker(file, table, monitor, table.getSelectedRow(), 2);
worker.execute();
worker.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if ("progress".equals(event.getPropertyName())) {
monitor.setProgress((Integer)event.getNewValue());
monitor.setNote((Integer)event.getNewValue() + "% completed");
}
if("state".equals(event.getPropertyName())){
monitor.close();
}
}
});
}
monitor
の動作を監視していますworker
。サイズを決定しようとworker
する実装です(この特定のケースではファイルはディレクトリです。そのため、時間がかかりすぎてを使用する可能性があると思います)、時間がかかりすぎると、進行状況バーと進行状況に関する通知を含む新しいウィンドウが呼び出されます. 問題は、このウィンドウがフォーカスされており、ユーザーがファイルを参照できるようにバックグラウンドで開くことです (プログラムは単純なファイル マネージャーです)。SwingWorker
file
SwingWorker
monitor