2010-10-17 91 views
7

我試圖在Applet前面顯示一個模態對話框。如何在Java applet中打開模態對話框?

我目前的解決方案取根幀像這樣:

Frame getMyParent() { 
    Container parent = getParent(); 
    while (!(parent instanceof Frame)) { 
     parent = ((Component)parent).getParent(); 
    } 
    return (Frame)parent; 
} 

,並創建對話框如下:

public OptionsDialog(MainApplet applet, boolean modal) { 
    super(applet.getMyParent(), "options", modal); 
    // .... 

但是往往這表明模態對話框下面框架,雖然模態行爲正常工作。

這怎麼解決?

理想情況下,這應該是Java版本1.5及以上。

回答

2

使用 insterad applet.getMyParent()

+0

嗯,使用空將所有者框架設置爲'SwingUtilities.getSharedOwnerFrame()' - 我會測試,謝謝! – Nick 2010-10-18 14:13:25

+0

不幸的是,這並不能解決問題,我只用Chrome進行了測試,並且始終顯示在頁面下方。 – Nick 2010-10-26 19:12:17

4
JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this)); 
dialog.setModal(true); 
dialog.setSize(200, 200); 
dialog.setVisible(true); 
+0

謝謝camickr。不幸的是,這需要版本1.6,我堅持支持Java 1.5(因爲很多人仍然使用它)。不明確的道歉,我編輯了這個問題。 – Nick 2010-10-18 13:52:01

+0

我不知道我發佈的任何代碼是1.6版本所獨有的。 – camickr 2010-10-18 23:03:15

+0

我發現JDialog(Window)構造函數是1.6特定的:http://download.oracle.com/javase/6/docs/api/javax/swing/JDialog.html#JDialog(java.awt.Window) – Nick 2010-10-19 13:43:57

3

幀F =(幀)SwingUtilities.getAncestorOfClass(Frame.class,parentWindow)的; 新的JDialog(f,true);

(來源= http://kb.trisugar.com/node/7613) 作品parentWindow = sun.plugin2.main.client.PluginEmbeddedFrame