2010-09-14 54 views
3

我想在Java Swing中創建一個JDialog,當它打開時,其父窗口無法訪問(就像在Microsoft Word中打開文件資源管理器對話框時一樣)。 JDialog類中是否有提供此行爲的方法?JDialog在它的JFrame父類

回答

6

使用JDialog.setModal設置對話框中可見

JDialog yourdialog = ... 

yourdialog.setModal(true); 
... 

yourdialog.setVisible(true); 
+0

或使用定義模態的JDialog構造函數之一。 – Qwerky 2010-09-14 16:00:45

3

前(真)你有兩種選擇:

使用在JOptionPane靜態方法。這些將在默認情況下創建模式對話框:

Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel); 
JOptionPane.showMessageDialog(parentWindow, "Hello, World); // Create modal dialog aligned with parent window. 

創建JDialog明確:

Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel); 
JDialog dlg = new JDialog(parentWindow, ModalityType.APPLICATION_MODAL); 

第一個選項是簡單得多,我更願意它特別模態對話框。

0

如何在他的JFrame Parent中鎖定JDialog? 的確如此,使用JDialog.setModal能夠使jdialog就像其他應用程序上的對話一樣。停止所有框架bofore jDialog關閉

+1

看起來你有一個與其他人有點不同的答案,但它不是很清楚。我並不真正瞭解你的意思是在它的父代中「鎖定」一個JDialog。你能解釋一下你的想法嗎? – RustyTheBoyRobot 2012-06-11 14:59:34

1

Adamski和Jan都已經有了正確的答案,但我想確保模態窗口的概念得到解釋。

OP詢問了一個阻止訪問父對象的對話框。這被稱爲模態對話框(或模態窗口)。維基百科給出this definition

在用戶界面設計,模態窗口是一個子窗口,要求用戶與它進行交互,纔可以返回到操作父應用

所以,「莫代爾」的意思它將阻止父窗口(用戶不​​能與除模態窗口之外的任何窗口交互),而「非模態」或「無模式」意味着子窗口和父窗口將同時可訪問。

這是一個概念,通常存在於GUI框架中,而不僅僅是Swing框架。在您使用的任何GUI框架中,您可以通過查找modal屬性來找到這種功能。