在 swing 应用程序中创建一个模态 javafx.stage.FileChooser



我有一个 Swing 应用程序,其主窗口继承JFrame类。此应用程序正在过渡到 JavaFX,因此 JavaFX 组件上有很多内容,包括控制面板。 我需要以相对于主JFrame的模式方式显示来自非 UI 线程的本机文件选择器。这可以通过设置类FileChooser所有者来实现,但它需要javafx.stage.Window成为所有者。是否有一些技巧可以将JFrame设置为javafx FileChooserStage的所有者?

解决方案可能是以某种方式禁用选择JFrame,直到FileChooser关闭。

这里有一些伪代码,因为我不知道 swing 那么好:

  1. 以某种方式从 JFrame 中删除焦点(也许使用 setFocusableWindowState(false)
  2. 在 FXApplication 线程上打开文件选择器
  3. 完成后(使用 Thread.join() 或您想要管理线程的方式完成(,将焦点恢复到 JFrame

实际上就像:

JFrame frame = // get window 
frame.setEnabled(false); // emulate window modality
    File file = fileChooser.showOpenDialog(null);
    if (file == null || !openFile(file)) { // return true if file was opened correctly
        frame.setEnabled(true);
        frame.requestFocus(); // window looses focus after enabling
    }

所以FileChooser在这里的行为就像模态窗口一样。缺点是需要控制所有路径以启用窗口后退,这样它就不会永远处于禁用状态。

最新更新