在swing应用程序中创建模式javafx.stage.FileChooser

在swing应用程序中创建模式javafx.stage.FileChooser,java,swing,user-interface,javafx,javafx-8,Java,Swing,User Interface,Javafx,Javafx 8,我有一个Swing应用程序,其主窗口继承了JFrame类。这个应用程序正在向JavaFX过渡,所以有很多关于JavaFX组件的内容,包括控制面板。 我需要以相对于mainJFrame的模态方式显示非UI线程中的本机文件选择器。 这可以通过设置FileChooser类的所有者来实现,但它需要javafx.stage.Window作为所有者。 是否存在将JFrame设置为javafxFileChooser或Stage所有者的黑客行为?解决方案可能是以某种方式禁用选择JFrame,直到FileChoo

我有一个Swing应用程序,其主窗口继承了
JFrame
类。这个应用程序正在向JavaFX过渡,所以有很多关于JavaFX组件的内容,包括控制面板。 我需要以相对于main
JFrame
的模态方式显示非UI线程中的本机文件选择器。 这可以通过设置
FileChooser
类的所有者来实现,但它需要
javafx.stage.Window
作为所有者。
是否存在将
JFrame
设置为javafx
FileChooser
Stage
所有者的黑客行为?

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

这里有一些伪代码,因为我对swing不太了解:

  • 以某种方式从JFrame中移除焦点(可能使用
    setFocusableWindowsState(false)
    ?)
  • 在FXApplication线程上打开文件选择器
  • 完成后(使用
    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
    在这里的行为类似于模态窗口。缺点是需要控制所有路径才能启用“窗口后退”,这样它就不会永远处于禁用状态。

    据我所知,没有一个。5分钟的Google显示,通常的做法是将所有者设置为<代码> null >代码>。设置窗口的所有者没有问题,问题是当文件选择器打开时JFrame将被点击。您可能需要考虑添加<代码> Swing 标签。解决方案可能是在
    FileChooser
    关闭之前以某种方式禁用选择JFrame,我认为在
    swing
    方面更有经验的程序员可能比那些有
    javafx
    经验的程序员更有助于为您提供这样的解决方案。非常感谢!不知何故,我错过了这个(现在看来)显而易见的解决方案。请提供它作为一个答案,我会标记为一感谢你的答案,但为了保持它的精确性,我添加了精确的解决方案。很高兴你得到了它的工作!确保单击复选框将此答案标记为已接受,这有助于将来有相同问题的人知道他们可以在此处找到解决方案。