Frage

Ich muß ein Applet schreiben, die einen Passwort-Dialog bringt. Das Problem ist, dass Dialog immer sein wird oben, aber wenn Benutzer klickt auf IE-Fenster-Dialog wird dennoch hinter IE-Fenster ausgeblendet. Und da Dialog ist modal und hält alle IE fädelt IE Bereich nicht funktioniert aufzufrischen und Dialogfenster noch oben auf IE gemalt ist (aber nicht aktualisiert). Dieses Verhalten verwirrt Benutzer (sie sehen Dialog oben auf IE, aber es sieht aus wie es aufgehängt hat, da es nicht refreshe ist).

Also muß ich einen Weg, um diesen Dialog obendrein zu halten. Aber eine andere Lösung für dieses Problem wäre schön.

Hier ist der Code:

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

Auflösung: Wie @shemnon bemerkt sollte ich ein Fenster machen statt (null, Frame, Applet) Eltern von modalen Dialog. So gute Möglichkeit, Eltern initlialize war:

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet);
War es hilfreich?

Lösung

Was Argument verwenden Sie für die Eltern?

Sie haben mehr Glück, wenn Sie die Eltern des Applets verwenden.

javax.swing.SwingUtilities.getWindowAncestor(theApplet)

das getWindowAncestor verwendet, wird die Applet Eltern überspringen (getRoot (Komponente) wird Applets zurück). In zumindest einige Versionen von Java gibt es einen Rahmen, der äquivalent zu dem IE-Fenster war. YMMV.

Andere Tipps

Machen Sie einen Hintergrund-Thread, der alle 2 Sekunden toFront auf dem Dialog aufruft. Code, die wir verwenden (ich hoffe, ich habe alles):

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;
}

Dies ist ein Schuss im Dunkel, da ich nicht vertraut mit Applets bin, aber man kann einen Blick auf IE eingebaute in window.showModalDialog Methode nehmen. Es ist ziemlich einfach zu bedienen. Vielleicht eine Kombination dieser und Noah Vorschlag?

Sie könnten versuchen, eine modale von JavaScript startet die JavaScript-Integration (siehe http: // www .raditha.com / java / mayscript.php für ein Beispiel ).

Der JavaScript müssen Sie wären so etwas wie:

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

Und die Java wäre:

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

Leider bedeutet, dass bis zu geben alle Hoffnung eine gut aussehende modal zu haben. Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top