Используйте JavaFX FileChooser в Swing - PullRequest
0 голосов
/ 27 августа 2018

Я работаю над приложением Swing, но некоторые части этого приложения начинают использовать JavaFX. Теперь я хотел бы использовать JavaFX FileChooser, потому что он показывает диалог, специфичный для операционной системы (гораздо удобнее в использовании).

Проблема в модальности. Для других диалогов существует несколько подходов для решения проблем модальности с JavaFX в Swing (например, оборачивание содержимого диалога в фрейм Swing с использованием другого JFXPanel, установка alwaysOnTop сцены в true, ...). И то, и другое невозможно с FileChooser.

В настоящее время я использую этот подход, который является почти рабочим решением (осторожно: это только черновик, следует добавить CountDownLatch и использование try {} finally {}):

JDialog dialog; 
SwingUtilities.invokeLater({ => 
  dialog = new JDialog(thisView.getCanvas().getRootPane() as Frame, "", true); 
  dialog.setUndecorated(true); 
  dialog.setVisible(true); 
}); 
FileChooser fileChooser = new FileChooser(); 
fileChooser.setTitle("Load Composition From File"); 
fileChooser.showOpenDialog(null); 
dialog.setVisible(false);

Идея состоит в том, что невидимый модальный диалог Swing «блокирует» приложение Swing, пока пользователь не закроет FileChooser. Это отлично работает.

Единственная проблема в том, что FileChooser может быть перемещен в фоновый режим. Было бы хорошо для меня установить alwaysOnTop = true, но не смог найти способ сделать это. Есть предложения?

...