Я не знаю, как это сделать, потому что окно 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
вызывает новое окно с индикатором выполнения и уведомлением о ходе выполнения.Проблема в том, что это окно сфокусировано, и я бы предпочел, чтобы оно открывалось в фоновом режиме, чтобы пользователь все еще мог просматривать файлы (программа представляет собой простой файловый менеджер).