Как использовать окно ProgressMonitor, не теряя фокус на главном JFrame? - PullRequest
2 голосов
/ 28 февраля 2012

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

3 голосов
/ 28 февраля 2012

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

Где:

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

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

...