2010-11-22 6 views
1

ich einen JOptionPane Popup in meinem Applet habe in der Regel, a-la:JOptionPane.showOptionDialog nicht immer nach vorne in Applet bewegt

 Object[] options = {"Grade", "Save", "Cancel"}; 
     selection = JOptionPane.showOptionDialog(this, 
     "Do you want to grade now or save your work to continue later?", 
     "Grade Or Save", 
     JOptionPane.DEFAULT_OPTION, 
     JOptionPane.QUESTION_MESSAGE, 
     null, 
     options, 
     options[2]); 

this auf das Objekt JApplet bezieht.

Das Popup funktioniert gut und alles, aber gelegentlich wird es hinter dem Applet angezeigt, anstatt vor ihm aufzutauchen.

Antwort

0

Ohne es zu wissen, übergeben Sie möglicherweise nicht die Hauptkomponente; speziell "this" in den showOptionDialog(). Stellen Sie sicher, dass "dies" tatsächlich die Hauptkomponente ist.

Wenn "das" bezieht sich auf einen Rahmen Sie, welche Rahmen in Fokus finden kann, ist, indem Sie die folgenden:

(pseduo Code)

myFrames [] = Frame.getFrames();

if (myFrames [i] .isFocused()) Rahmen in

:) passieren
+0

Bestätigt, dass "dies" in der Tat das JApplet ist, so dass das nicht das Problem ist. Es scheint damit zu tun zu haben, ob der Benutzer zuerst aus dem Applet klickt. –

+0

Sie können dies ausdrucken.isFocusOwner() und sehen, was Sie vor dem Aufruf von JOptionPane() erhalten. Es wäre interessant zu sehen, ob es im Fehlerfall false zurückgibt. Wenn dies der Fall ist, möchten Sie vielleicht requestFocusInWindow() oder requestFocus() aufrufen; – AdamOver

0

Das, was zu tun ist, die Eltern des Applets zu finden, dass ein Rahmen (es ist eine versteckten, Plugin-spezifischen Art) und benutze diesen Rahmen als Dialogbesitzer. Sie finden das mit (Frame)SwingUtilities.getAncestorOfClass(java.awt.Frame.class, theApplet);

Das wird sicherstellen, dass der Dialog oben auf dem Browser bleibt. Wenn der Benutzer jedoch die Browserregisterkarten wechselt, wird das Dialogfeld nicht ausgeblendet.