2

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

4

1 回答 1

3

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

在哪里:

parentComponent-对话框的父组件

对话框在可见时将具有焦点,然后在关闭或设置为不可见时应将焦点返回给父级。

于 2012-02-28T14:45:37.253 回答