Java 如何使用ProgressMonitor窗口而不丢失对主框架的关注?

Java 如何使用ProgressMonitor窗口而不丢失对主框架的关注?,java,swing,focus,progressmonitor,Java,Swing,Focus,Progressmonitor,我不知道怎么做,因为ProgressMonitor窗口是自调用的(2秒后,如果必要的话),我无法控制它何时以及是否打开。因此,我不知道如何在背景中打开它,所以焦点停留在主框架上 MyFile file = panel.getFilesystem().getFile(panel.getDirectory()+fileName); if(file.isDirectory()){ final ProgressMonitor monitor = new ProgressMonitor((Comp

我不知道怎么做,因为ProgressMonitor窗口是自调用的(2秒后,如果必要的话),我无法控制它何时以及是否打开。因此,我不知道如何在背景中打开它,所以焦点停留在主框架上

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
是一个
SwingWorker
实现,它试图对
文件大小进行反挖掘(在这种情况下,文件是一个目录,这就是为什么我假设它可能需要很长时间并使用
SwingWorker
),如果花费的时间太长,监视器将调用一个新窗口,其中包含进度条和进度通知。问题是这个窗口的焦点是,我更希望它在后台打开,这样用户仍然可以浏览文件(该程序是一个简单的文件管理器)。

其中:

parentComponent
-对话框的父组件


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

让我来拿魔法8球。您没有发布任何代码,也没有对您的应用程序结构进行深入描述,但我们希望知道您的意思。我们不是通灵者-请发布一段代码来演示您的实际问题。现在它是这样工作的,对话框在可见时聚焦,对话框关闭时主窗口聚焦(通过单击“取消”按钮或在
工作人员完成后通过
监视器.close()
自动聚焦)。我的观点是:如何做到这一点,对话框永远不会聚焦(除非用户在任务栏上选择它)?好的,但是除了一些方便的方法&一个按钮来关闭它(您希望聚焦),使用
ProgressMonitor
的优点是什么(例如)主界面中的
JProgressBar
,可根据需要设置为可见/不可见?第一个优点显然很简单,只需几行代码就足够了。其次,我更喜欢在单独的窗口中打开它,因为我可以单独保存每个任务的progressbar,如果我将它们保留在主UI中,它可能会因为progressbar的数量太多而变得混乱(例如,如果用户希望并行运行大量复制粘贴任务)。我担心这种简单性可能会对我不利,最终我将被迫创建自己的对话框窗口。“主UI可能会变得混乱”一个进度条的“JList”如何(完成后删除每个进度条)?好吧,这是另一种可能性,可能甚至比单独的窗口更好。我想我会这样做,UI将保持更紧凑。谢谢你的建议。不管怎样,如果你能找到我问题的答案,把它贴在这里,我只是好奇这是否可能。