因此,我们再次将完全使用 Swing 的现有 Java 应用程序转换为使用 JavaFX。但是,该应用程序不会完全使用 JavaFX。这似乎会导致警报/对话框和模式出现一些问题。我们目前使用的是 Java 8u40。
主应用程序基本上位于具有菜单的 JFrame 中。主要内容 Pane 是 JDesktopPane,单击 MenuItem 会在 DeskopPane 中打开新的 JInternalFrames。目前,我们正在转换为 JavaFX 的屏幕基本上是 JInternalFrame 中的 JFXPanel。从 JFXPanel 打开的任何警报/对话框都是面板本身的模式,但不是 JInternalFrame、DeskopPane、Menu 等。
我在 DialogPane 文档中读到,他们计划在 JavaFX 的 future 版本中引入一些轻量级对话框,甚至可能引入 InternalFrames,所以也许我们只需要再等一段时间才能使用此功能。但是,理想情况下,当打开一个新的警报/对话框时,它将是整个应用程序的模态。
编辑:
目前正在为模态对话框执行以下操作:
((Stage)getDialogPane().getScene().getWindow()).setAlwaysOnTop(true);
这使得对话框始终显示在顶部,但是即使我们的主应用程序被最小化,该对话框也会保留在其他应用程序的顶部。它也不会阻止输入到框架中的任何 Swing 组件。
最佳答案
您可以使用以下解决方法来创建一个不可见的 JDialog
当Alert
显示并处理 JDialog
当Alert
关闭了。这种方法将模态扩展到整个应用程序,包括 Swing 部分。
// create Alert
Alert alert = new Alert(AlertType.INFORMATION, "Hello");
// create invisible JDialog and "show" it
JDialog dialog = new JDialog();
dialog.setModal(true);
dialog.setUndecorated(true);
dialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
SwingUtilities.invokeLater(() -> dialog.setVisible(true));
// show Alert
alert.showAndWait();
// close JDialog after Alert is closed
dialog.dispose();
关于swing - 在 Swing 应用程序中制作 JavaFX 警报/对话框模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058142/