在JInternalFrame中显示模态对话框而不暂停应用程序

时间:2009-09-14 08:16:57

标签: java frames

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

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

是否可以在不更改代码的情况下(或者至少只是更改代码)来执行此操作?

2 个答案:

答案 0 :(得分:1)

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

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

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

但是,你的JInternalFrames是JRootPanes,这意味着他们有glasspanes。您可以使用它来创建自己的各种模态。我们的想法是让每个JInternalFrame的模态弹出窗口都显示在一个安装在JInternalFrame上的透明玻璃板上。添加一个使用鼠标事件的鼠标侦听器到透明玻璃板,这将获得模态功能#2(背景似乎无响应)。使用OO而不是阻塞来获取功能#1(让你的模态弹出窗口采用IModalPopupListener(我做了这个 - 你必须创建它)对象在模态弹出窗口消失时回调)。

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

答案 1 :(得分:-1)

这看起来很有希望:

Creating Modal Internal Frames

修改

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

  

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

这不是你想要的吗?