Как использовать окно ProgressMonitor, не теряя фокус на основном JFrame?

Я не знаю, как это сделать, потому что окно 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 ответ

Решение

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

Куда:

parentComponent - родительский компонент для диалогового окна

Диалог будет иметь фокус, когда он виден, затем должен вернуть фокус родительскому элементу, когда он будет отклонен или установлен невидимым.

Другие вопросы по тегам