2010-10-17 14 views
7

Estoy tratando de mostrar un cuadro de diálogo modal delante de Applet.¿Cómo abrir un diálogo modal en el applet de Java?

Mi solución actual obtiene el marco de la raíz de este modo:

Frame getMyParent() { 
    Container parent = getParent(); 
    while (!(parent instanceof Frame)) { 
     parent = ((Component)parent).getParent(); 
    } 
    return (Frame)parent; 
} 

Y crea el cuadro de diálogo de la siguiente manera:

public OptionsDialog(MainApplet applet, boolean modal) { 
    super(applet.getMyParent(), "options", modal); 
    // .... 

Sin embargo a menudo esto muestra el diálogo modal continuación el marco, aunque el el comportamiento modal funciona correctamente.

¿Cómo se puede solucionar?

Idealmente, esto debería ser para las versiones de Java 1.5 y superiores.

Respuesta

2

Uso nula insterad de applet.getMyParent()

+0

Hmmm, utilizando nula fijará el marco de propietario para 'SwingUtilities.getSharedOwnerFrame()' - Voy a probar, gracias! – Nick

+0

Lamentablemente, esto no resuelve el problema, solo lo he probado con Chrome y se muestra constantemente debajo de la página. – Nick

4
JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this)); 
dialog.setModal(true); 
dialog.setSize(200, 200); 
dialog.setVisible(true); 
+0

Gracias camickr. Desafortunadamente, esto requiere la versión 1.6 y estoy atascado con el soporte de Java 1.5 (ya que mucha gente todavía usa esto). Disculpas por no aclarar, he editado la pregunta. – Nick

+0

No tengo conocimiento de que ningún código que publique sea exclusivo de la versión 1.6. – camickr

+0

Encontré que el constructor de JDialog (Ventana) es específico de 1.6: http://download.oracle.com/javase/6/docs/api/javax/swing/JDialog.html#JDialog(java.awt.Window) – Nick

3

Frame f = (Frame) SwingUtilities.getAncestorOfClass (Frame.class, parentWindow); nuevo JDialog (f, verdadero);

(fuente = http://kb.trisugar.com/node/7613) obras para parentWindow = sun.plugin2.main.client.PluginEmbeddedFrame

Cuestiones relacionadas