2008-09-16 13 views
2

パスワードダイアログを表示するアプレットを作成する必要があります。問題は、ダイアログが常に上になるように設定されていることですが、ユーザーがIEウィンドウのダイアログをクリックしても、IEウィンドウの後ろに隠れることになります。ダイアログはモーダルで保持されているので、すべて IEスレッドIEペインはリフレッシュされず、ダイアログウィンドウはまだIEの上に塗りつぶされますが、リフレッシュされません。この動作はユーザーを混乱させます(IEの上にあるのダイアログを参照してくださいが、リフレッシュされていないのでハングしたようです)。ユーザがIEペインをクリックするとIEのモーダルダイアログがIEの背後に隠れる

だから私はすべての上にそのダイアログを維持する方法が必要です。しかし、この問題に対する他の解決策は素晴らしいでしょう。

 PassDialog dialog = new PassDialog(parent); 
     /* do some non gui related initialization */ 
     dialog.pack(); 
     dialog.setLocationRelativeTo(null); 
     dialog.setAlwaysOnTop(true); 
     dialog.setVisible(true); 

解像度:

は、ここでは、コードです@shemnonが指摘したように私の代わりにモーダルダイアログの(ヌル、フレーム、アプレット)親のウィンドウを作成する必要があります。親をinitlializeするので、良い方法は:

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet); 

答えて

1

あなたはどのような議論を親にしていますか?

アプレットの親を使用した方がよいかもしれません。 (アプレットを返しますgetRoot(部品))アプレット両親をスキップしますgetWindowAncestorを使用して

javax.swing.SwingUtilities.getWindowAncestor(theApplet) 

。少なくともJavaのいくつかのバージョンでは、IEウィンドウと同等のフレームがありました。 YMMV。

+0

まあ、私はJOptionPane.getRootFrameのようなことをしました。私はそれを最初に調べるつもりですtommorow。 –

+0

Worked - ありがとう。 –

0

あなたは(例えばhttp://www.raditha.com/java/mayscript.phpを参照)JavaScriptの統合を使用して、JavaScriptからモーダルを起動してみてください。

あなたが必要となるJavaScriptのようなものになるだろう:

function getPassword() { 
    return prompt("Enter Password"); 
} 

とJavaは次のようになります。

password = jso.call("getPassword", new String[0]); 

残念ながらそれはモーダル見栄えを持つすべての希望をあきらめることを意味します。がんばろう!

1

2秒ごとにダイアログのtoFrontを呼び出す背景スレッドを作成します。私たちは(私はすべてのものを得た願っています)を使用 コード:

class TestClass { 
protected void toFrontTimer(JFrame frame) { 
    try { 
     bringToFrontTimer = new java.util.Timer(); 
     bringToFrontTask = new BringToFrontTask(frame); 
     bringToFrontTimer.schedule(bringToFrontTask, 300, 300); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 
} 

class BringToFrontTask extends TimerTask { 
    private Frame frame; 
    public BringToFrontTask(Frame frame) { 
     this.frame = frame; 
    } 
    public void run() 
    { 
     if(count < 2) { 
      frame.toFront(); 
     } else { 
      cancel(); 
     } 
     count ++; 
    } 
    private int count = 0; 
} 

public void cleanup() { 
    if(bringToFrontTask != null) { 
     bringToFrontTask.cancel(); 
     bringToFrontTask = null; 
    } 
    if(bringToFrontTimer != null) { 
     bringToFrontTimer = null; 
    } 
} 

java.util.Timer bringToFrontTimer = null; 
java.util.TimerTask bringToFrontTask = null; 
} 
+0

私には強烈な力があります。しかし、それは最も簡単な選択です。 –

1

私はアプレットに慣れていないよ、これは暗闇の中でのショットですが、ビルトインwindow.showModalDialog IEのを見てみることができ方法。それはかなり使いやすいです。おそらくこれとノアの提案の組み合わせでしょうか?

関連する問題