在swing应用程序中创建模式javafx.stage.FileChooser
我有一个Swing应用程序,其主窗口继承了在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
JFrame
类。这个应用程序正在向JavaFX过渡,所以有很多关于JavaFX组件的内容,包括控制面板。
我需要以相对于mainJFrame
的模态方式显示非UI线程中的本机文件选择器。
这可以通过设置FileChooser
类的所有者来实现,但它需要javafx.stage.Window
作为所有者。
是否存在将
JFrame
设置为javafxFileChooser
或Stage
所有者的黑客行为?解决方案可能是以某种方式禁用选择JFrame
,直到FileChooser
关闭
这里有一些伪代码,因为我对swing不太了解:
setFocusableWindowsState(false)
?)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
经验的程序员更有助于为您提供这样的解决方案。非常感谢!不知何故,我错过了这个(现在看来)显而易见的解决方案。请提供它作为一个答案,我会标记为一感谢你的答案,但为了保持它的精确性,我添加了精确的解决方案。很高兴你得到了它的工作!确保单击复选框将此答案标记为已接受,这有助于将来有相同问题的人知道他们可以在此处找到解决方案。