【问题标题】:Display a Modal Dialog Box in a JInternalFrame without pausing Application在 JInternalFrame 中显示模态对话框而不暂停应用程序
【发布时间】:2009-09-14 08:16:57
【问题描述】:

我有一个使用 JInternalFrames 的 MDI 应用程序。每个内部框架执行不同的操作,但是,其他一些框架使用 JOptionPane 显示消息,这当然会暂停整个应用程序。

是否无论如何(无论何时 JOptionPane 对话框或任何其他对话框)都是模态到其 OWN 内部框架(即框架 X 显示一条消息,暂停其 OWN 框架,但允许框架 Y 和其余的申请继续)?

是否可以在不更改代码(或至少只更改一小部分)的情况下做到这一点?

【问题讨论】:

    标签: java frames


    【解决方案1】:

    我明白你在问什么,这可能是可能的,但绝对不容易。您希望模态对于弹出模态对话框的 JInternalFrame 是“本地的”。

    首先,您需要了解,模态弹出窗口实际上有两个部分,可以用您自己创建的东西来近似。 1) 设置模态弹出框直到弹出框关闭的代码,以及 2) 当模态弹出框可见时,“背景”不响应 GUI 事件。

    真正的模态通过阻塞当前的 EDT 并为模态组件创建一个新的事件泵来实现这一点。 (请参阅 java.awt.Container.#startLWModal())这对您不起作用,因为您的所有 JInternalFrames 共享 1 个 EDT,这对于 Swing 的工作方式非常基础(单 UI 线程)

    但是,您的 JInternalFrames 是 JRootPanes,这意味着它们具有玻璃窗格。您可以使用它来创建您自己的各种形式。这个想法是让每个 JInternalFrame 的模态弹出窗口以安装在 JInternalFrame 上的透明玻璃窗格为中心出现。向透明玻璃窗格添加一个消耗鼠标事件的鼠标侦听器,这将为您提供模态功能#2(背景似乎没有响应)。使用 OO 而不是阻塞来获取功能 #1(让您的模态弹出窗口采用 IModalPopupListener(我做了这个 - 您必须创建它)对象,以便在模态弹出窗口消失时回调)。

    我希望这是有道理的!祝你好运!

    【讨论】:

      【解决方案2】:

      这看起来很有希望:

      Creating Modal Internal Frames

      编辑

      回复您的评论(来自链接页面):

      但有时你可能会 想要一个内部框架中的对话框 是模态的。本技术提示将向您展示 如何在 内部框架。

      这不正是您想要的吗?

      【讨论】:

      • 知道如何只制作一帧吗??
      • 好吧,我用 2 个内部框架而不是 1 个内部框架尝试了他们给出的示例,它们都是模态的(即我无法访问框架 2)。然而,父框架是非模态的。我想要做的只是第 1 帧是模态的,但第 2 帧和父帧是非模态的。
      • 从阅读中,它看起来与您的问题完美匹配,我必须承认,我从未尝试过。希望你能找到一个可行的解决方案:)
      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多