【问题标题】:A dialog that must be finished before anything else takes place必须在其他任何事情发生之前完成的对话
【发布时间】:2014-02-18 00:05:21
【问题描述】:

在 Java 中是否有一种简单的方法可以创建一个对话框,在它关闭之前不会让您改变焦点?例如使整个屏幕变灰的窗口对话框,只让您与它交互,直到您满意为止。

【问题讨论】:

标签: java swing user-interface dialog modal-dialog


【解决方案1】:

您可以使用 JDialog 轻松完成此操作

JDialog dialog = new JDialog(Frame owner, "My modal dialog", **true**)

【讨论】:

    【解决方案2】:

    您可以使您的对话框模式化以阻止用户输入。来自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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2020-12-08
      相关资源
      最近更新 更多