Domanda

Devo scrivere un applet che visualizza una finestra di dialogo password.Il problema è che il dialogo è impostato per essere sempre al top, ma quando l'utente fa clic su IE finestra di dialogo si nasconde dietro la finestra di IE tuttavia.E poiché la finestra di dialogo modale e tiene tutti IE thread IE riquadro di non aggiornare e di dialogo finestra è ancora dipinta sulla parte superiore di IE (ma non aggiornato).Questo comportamento si confonde gli utenti (che vedere dialogo sopra IE ma sembra che si è impiccato perché non è refreshe).

Quindi ho bisogno di un modo per tenere la finestra in cima a tutto.Ma qualsiasi altra soluzione a questo problema, sarebbe bello.

Ecco il codice:

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

Risoluzione:Come @shemnon notato una finestra invece di (null, Telaio, Applet) genitore di una finestra di dialogo modale.Quindi buon modo per initlialize padre è stata:

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet);
È stato utile?

Soluzione

Che argomento stai usando per il genitore?

Si può avere più fortuna se si usa il capogruppo dell'Applet.

javax.swing.SwingUtilities.getWindowAncestor(theApplet)

Utilizzando il getWindowAncestor salta l'applet genitori (getRoot(componente) tornerà applet).Almeno In alcune versioni di Java c'era un Telaio che era equivalente alla finestra di IE.YMMV.

Altri suggerimenti

Fare un Thread in background che chiama toFront nella finestra di Dialogo ogni 2 secondi.Il codice che usiamo (spero mi è arrivato tutto):

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

Questo è un salto nel buio come non ho familiarità con le applet, ma si potrebbe dare un'occhiata a IE built-in finestra.metodo showModalDialog.E ' abbastanza facile da usare.Forse una combinazione di questo e di Noè suggerimento?

Si potrebbe provare a lanciare un modale da JavaScript utilizzando il JavaScript integrazione (vedi http://www.raditha.com/java/mayscript.php per un esempio).

Il JavaScript si avrebbe bisogno sarebbe qualcosa di simile:

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

E il Java sarebbe:

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

Purtroppo ciò significa rinunciare a ogni speranza di avere una bella modale.Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top