Los cuadros de diálogo modales en IE se oculta detrás de es decir, si el usuario hace clic en panel de IE

StackOverflow https://stackoverflow.com/questions/73000

Pregunta

Tengo que escribir un subprograma que abre un cuadro de diálogo de contraseña.El problema es que el diálogo se establece a estar siempre en la parte superior, pero cuando el usuario hace clic en la ventana de IE de diálogo oculta detrás de la ventana de IE sin embargo.Y desde el cuadro de diálogo es modal y tiene todos Es decir hilos IE panel no se actualiza y ventana de diálogo todavía está pintado en la parte superior de la IE (pero no se actualiza).Este comportamiento confunde a los usuarios (que ver de diálogo en la parte superior de IE, pero parece que se ha colgado ya que no es refreshe).

Así que necesito una manera de mantener ese diálogo por encima de todo.Pero cualquier otra solución a este problema sería agradable.

Aquí está el código:

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

Resolución:Como @shemnon señaló que debo hacer una ventana en lugar de (null, Marco, Applet) de los padres de diálogo modal.Así que buena manera de initlialize padre fue:

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet);
¿Fue útil?

Solución

Con qué argumento que están utilizando para el padre?

Puede que tenga mejor suerte si utiliza el padre de la Applet.

javax.swing.SwingUtilities.getWindowAncestor(theApplet)

El uso de la getWindowAncestor saltará el applet padres (getRoot(componente) devolverá los applets).Al menos en algunas versiones de Java hay un Marco que es equivalente a la de la ventana de IE.YMMV.

Otros consejos

Hacer un Subproceso de fondo que llama toFront en el cuadro de Diálogo cada 2 segundos.El código que utilizamos (espero que me de todo):

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

Este es un disparo en la oscuridad, ya que no estoy familiarizado con los applets, pero puedes echar un vistazo en IE integrado en la ventana.showModalDialog método.Es bastante fácil de usar.Tal vez una combinación de esto y Noé sugerencia?

Usted puede tratar de lanzar un modal de JavaScript mediante la integración con JavaScript (ver http://www.raditha.com/java/mayscript.php para un ejemplo).

El JavaScript que se necesitaría sería algo como:

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

Y el Java sería:

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

Por desgracia, eso significa renunciar a toda esperanza de tener un aspecto agradable modal.Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top