【问题标题】:Access a modeless JFrame while a modal JDialog is visible?在模态 JDialog 可见时访问无模态 JFrame?
【发布时间】:2018-12-24 12:14:30
【问题描述】:

是否可以在模态 JDialog 可见时访问非模态 JFrame?

我有一个显示我的日志行的 JFrame。当我显示一个模态 JDialog,例如登录时,用户无法单击 JFrame。

JFrame 不是 JDialog 的父级/所有者。

JFrame 是第一个被创建的 JFrame。

请注意,当我在 JDialog 中执行导致将日志行添加到日志中的操作时,我可以看到它出现在 JFrame 中。

这是它应该如何工作还是可以让用户在模态 JDialog 可见时单击 JFrame?

【问题讨论】:

    标签: java swing jframe jdialog


    【解决方案1】:

    如果对话框是应用程序模式的,例如ModalityType.APPLICATION_MODAL,那么当对话框可见时,它将阻止用户与应用程序中所有其他顶级窗口的交互。这不会阻止应用程序本身更改其他顶级窗口状态,包括它们显示的任何文本。

    【讨论】:

    • 干杯 @Hovercraft 满满的鳗鱼!感谢您的确认和解释。
    • 我查看了 ModalityType 类,似乎 ModalityType.DOCUMENT_MODAL 确实允许在模态对话框可见时访问 JFrame。您无法访问模式对话框的父级/所有者,但如果 JFrame 与模型对话框无关,则可以访问它。我将深入研究文档并进行一些测试。
    【解决方案2】:

    似乎使用 ModalityType.DOCUMENT_MODAL 就是答案。

    给出 JDialog ModalityType.DOCUMENT_MODAL (setModalityType) 并确保 setModal 为 false。 JDialog 还应该有所有者/父窗口。

    应该始终可访问的 JFrame 应该与 JDialog 无关,因此不要将其用作 JDialog 的所有者/父级。

    现在 JDialog 会阻止所有者/父窗口,但在显示模态 JDialog 时仍可访问 JFrame。

    感谢 @Hovercraft Full Of Eels 为我指出 ModalityType。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多