swing - 在 Swing 应用程序中制作 JavaFX 警报/对话框模式

标签 swing javafx modal-dialog alert jdesktoppane

因此,我们再次将完全使用 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 组件。

最佳答案

您可以使用以下解决方法来创建一个不可见的 JDialogAlert显示并处理 JDialogAlert关闭了。这种方法将模态扩展到整个应用程序,包括 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/

相关文章:

c++ - 如何准确找到从哪个类调用 DoModal()?

javascript - 非常技术性 - 模态需要时间加载。如何减少加载时间?

macos - javafxpackager 在 Mac OS X 上错误地定位应用程序文件夹

Java Gui,隐藏其中一些元素后元素之间的间隙

java - 通过Intellij调试时跳转到单击Jbutton时执行的方法

Java - 重绘不工作

java - 在 FXML 中传递枚举

JavaFX 并发 - 使用任务,该任务在线程中运行,但挂起 UI

java - 请求的纹理尺寸 JavaFX

javascript - 如何将 "destoryOnHide"或 "destroyOnClose"设置为 Liferay 中现有的模式对话框?