我不知道该怎么做,因为 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
大小的实现(在这种特殊情况下,文件是一个目录,这就是为什么我认为它可能需要很长时间并使用 a SwingWorker
),如果它需要太长时间monitor
调用一个带有进度条和进度通知的新窗口. 问题是这个窗口集中在我希望它在后台打开,所以用户仍然可以浏览文件(程序是一个简单的文件管理器)。