我不知道怎么做,因为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
调用带有进度条的新窗口和有关进度的通知。问题是这个窗口是关注的,我宁愿它在后台打开,所以用户仍然可以浏览文件(该程序是一个简单的文件管理器)。
答案 0 :(得分:3)
ProgressMonitor(parentComponent, message, note, min, max)
其中:
parentComponent
- 对话框的 父组件
对话框在可见时会有焦点,然后在被解除时将焦点返回到父对象或设置为不可见。