ventana sirve showmessagedialog showinputdialog showconfirmdialog que personalizar para emergente ejemplos java internet-explorer swing applet modal-dialog

java - sirve - personalizar joptionpane



Los diálogos modales en IE se ocultan detrás de IE si el usuario hace clic en el panel de IE (4)

¿Qué argumento estás usando para el padre?

Puede tener mejor suerte si usa el padre del Applet.

javax.swing.SwingUtilities.getWindowAncestor(theApplet)

El uso de getWindowAncestor omitirá el applet de los padres (getRoot (componente) devolverá los applets). En al menos algunas versiones de Java, había un Frame que era equivalente a la ventana de IE. YMMV.

Tengo que escribir un applet que muestra un cuadro de diálogo de contraseña. El problema es que el diálogo está configurado para estar siempre en la parte superior, pero cuando el usuario hace clic en IE, el diálogo de la ventana se oculta detrás de la ventana de IE. Y dado que el diálogo es modal y contiene todos los subprocesos de IE, el panel de IE no se actualiza y la ventana de diálogo sigue pintada en la parte superior de IE (pero no actualizada). Este comportamiento confunde a los usuarios ( ven el diálogo en la parte superior de IE pero parece que se ha colgado ya que no se actualiza).

Entonces necesito una forma de mantener ese diálogo 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 debería hacer una ventana en lugar de (nulo, Marco, Applet) principal del cuadro de diálogo modal. Entonces, una buena forma de iniciar a los padres era:

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


Crear un fondo Enhebre las llamadas a Front en el Diálogo cada 2 segundos. Código que usamos (espero haberlo conseguido 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; }


Esta es una foto en la oscuridad ya que no estoy familiarizado con los applets, pero se puede echar un vistazo al método window.showModalDialog incorporado de IE. Es bastante fácil de usar. ¿Tal vez una combinación de esto y la sugerencia de Noah?


Puede probar el lanzamiento de un modal desde JavaScript utilizando la integración de JavaScript (consulte http://www.raditha.com/java/mayscript.php para ver un ejemplo).

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

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

Y el Java sería:

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

Desafortunadamente eso significa renunciar a toda esperanza de tener un aspecto agradable. ¡Buena suerte!