如何使用ProgressMonitor窗口而不会失去对主JFrame的关注?

时间:2012-02-28 13:52:44

标签: java swing focus progressmonitor

我不知道怎么做,因为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调用带有进度条的新窗口和有关进度的通知。问题是这个窗口是关注的,我宁愿它在后台打开,所以用户仍然可以浏览文件(该程序是一个简单的文件管理器)。

1 个答案:

答案 0 :(得分:3)

ProgressMonitor(parentComponent, message, note, min, max)

其中:

  

parentComponent - 对话框的 父组件

对话框在可见时会有焦点,然后在被解除时将焦点返回到父对象或设置为不可见。