2009-09-14 50 views
0

我有一個使用JInternalFrame的MDI應用程序。每個內部框架都執行不同的操作,但是,其他一些框架使用JOptionPane顯示消息,這當然會暫停整個應用程序。在JInternalFrame中顯示模態對話框而不暫停應用程序

是否有(無論如何一個JOptionPane對話框或任何其他對話框的情況下)對其OWN內部框架模式(即框架X顯示一條消息,暫停其OWN框架,但允許框架Y和其餘的應用程序繼續)?

是否有可能做到這一點,而不必更改代碼(或至少只是一點點)?

回答

1

我明白你在問什麼,這可能是可能的,但它絕對不會容易。您希望模態對彈出模態對話框的JInternalFrame是「本地」的。

首先,您需要明白,模式彈出式窗口中實際上有兩部分可以通過您自己的創作來近似。 1)在彈出窗口關閉之前設置模態彈出塊的代碼,以及2)當模式彈出窗口可見時,「背景」不響應GUI事件。

真正的模態通過阻止當前的EDT併爲模態組件創建新的事件泵來實現此目的。 (請參閱java.awt.Container。#startLWModal())這不適用於您,因爲所有JInternalFrame都共享1 EDT,這對於Swing如何工作非常重要(單個UI線程)

但是,你的JInternalFrames是JRootPanes,這意味着它們有glasspanes。你可以用它來創建你自己的模式,各種各樣。這個想法是讓你的模式彈出每個JInternalFrame出現在JInternalFrame上安裝的透明玻璃窗上。添加一個鼠標偵聽器,將鼠標事件消耗到透明玻璃窗,這會讓你獲得模態特性#2(背景似乎不響應)。使用面向對象代替阻塞來獲得功能#1(讓你的模態彈出窗口帶上一個IModalPopupListener(我做了這個 - 你必須創建它)對象在模態彈出消失時回調)。

我希望這是有道理的!祝你好運!

+0

你說得對,那正是我想要的。謝謝! :) – Kryten 2009-09-15 15:42:11

-1

這看起來很有希望:

Creating Modal Internal Frames

編輯

響應您的評論(來自鏈接的頁面):

有時然而,當你可能 希望內部框架中的對話框爲 爲模態。本技術提示將向您展示如何在 內部框架中創建模態對話框。

難道你不是在找什麼嗎?

+0

任何想法如何製作1幀? – Kryten 2009-09-14 11:06:20

+0

那麼我試着用2個內部幀而不是1個它們給出的例子,它們都是模態的(即我不能訪問幀2)。然而,父框架是非模態的。我想要做的只有第1幀模式,而第2幀和父幀非模態。 – Kryten 2009-09-14 15:36:13

+0

從閱讀看,它看起來像你的問題的完美搭配,我必須承認,我從來沒有嘗試過。希望你找到一個可行的解決方案:) – 2009-09-14 17:38:09