【发布时间】:2014-02-18 00:05:21
【问题描述】:
在 Java 中是否有一种简单的方法可以创建一个对话框,在它关闭之前不会让您改变焦点?例如使整个屏幕变灰的窗口对话框,只让您与它交互,直到您满意为止。
【问题讨论】:
标签: java swing user-interface dialog modal-dialog
在 Java 中是否有一种简单的方法可以创建一个对话框,在它关闭之前不会让您改变焦点?例如使整个屏幕变灰的窗口对话框,只让您与它交互,直到您满意为止。
【问题讨论】:
标签: java swing user-interface dialog modal-dialog
您可以使用 JDialog 轻松完成此操作
JDialog dialog = new JDialog(Frame owner, "My modal dialog", **true**)
【讨论】:
您可以使您的对话框模式化以阻止用户输入。来自Oracle modality tutorial:
模态对话框 - 一个对话框,它阻止输入到其他一些 应用程序中的顶级窗口,使用创建的窗口除外 对话框作为其所有者。模态对话框捕获 窗口焦点直到它关闭,通常是响应一个按钮 按下。
有四种类型的模态(同样来自教程):
- 无模式类型 - 无模式对话框在可见时不会阻塞任何其他窗口。
- 文档模式类型 - 文档模式对话框阻止来自同一文档的所有窗口,但来自其子文档的窗口除外 等级制度。在这种情况下,文档是窗口的层次结构 共享一个共同的祖先,称为文档根,它是 没有所有者的最近的祖先窗口。
- 应用程序模式类型 - 应用程序模式对话框阻止来自同一应用程序的所有窗口,但来自其子应用程序的窗口除外
等级制度。如果在浏览器环境中启动了多个小程序,
允许浏览器将它们视为单独的应用程序
或作为单个应用程序。这种行为是
依赖于实现。- Toolkit-modal 类型 - Toolkit-modal 对话框会阻止在同一工具包中运行的所有窗口,但来自其子级的窗口除外
等级制度。如果启动了多个小程序,则所有小程序都使用
相同的工具包。因此,从小程序显示的工具包模式对话框
可能会影响其他小程序和浏览器实例的所有窗口 为该工具包嵌入 Java 运行时环境。
您可以使用JDialog 来创建您的对话框。只需使用带有模态标志并将模态设置为 true 的构造函数之一。如果您愿意,可以指定上述类型之一,但默认为APPLICATION_MODAL。
这是一个您可以使用的简单构造函数:
public JDialog(Dialog owner, String title, boolean modal)
所以你只需添加
JDialog dialog = new JDialog(owner, "My test modal dialog", true);
【讨论】: