Foros del Web » Programación para mayores de 30 ;) » Java »

JDialog secundario

Estas en el tema de JDialog secundario en el foro de Java en Foros del Web. Hola, en mi aplicación tengo un JFrame y dos JDialog. Como padre está el JFrame y después JDialog1 que al instanciarlo se le pasa en ...
  #1 (permalink)  
Antiguo 06/07/2012, 06:47
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
JDialog secundario

Hola,
en mi aplicación tengo un JFrame y dos JDialog.

Como padre está el JFrame y después JDialog1 que al instanciarlo se le pasa en el constructor el JFrame y que es modal.

Después he creado un segundo JDialog nieto, JDialog2, ésta vez lo creo desde JDialog1 y no desde JFrame. Al crearlo le paso en el constructor "this" para hacer referencia a JDialog1. Este segundo no quiero que sea modal ya que se trata de una ventana que no quiero que bloquee al JDialog padre.

El problema es que aunque la herencia de padre, hijo y nieto está bien cada vez que abro JDialog2 se muestra detrás de JDialog1 y no delante como yo quiero.

Según iba escrbiendo he pensado que al ser JDialog1 modal se quedaría como ventana principal hasta que se cerrarse pero después he cambiado de idea otra vez porque lo que bloquea es el JFrame que lo había llamado.

En el enlace http://www.forosdelweb.com/f45/llevar-ventana-frente-foreground-450135 he visto que comentan de usar "toFront()" aunque puede no funcionar si no está bien definida la jerarquía. En mi caso está bien definida de padre, hijo y nieto pero se muestra momentáneamente y se esconde.

¿Alguna idea de cómo solucionarlo?. Un saludo
  #2 (permalink)  
Antiguo 09/07/2012, 05:16
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: JDialog secundario

Hola de nuevo,
¿nadie sabe cómo se puede solucionar esto?
La jerarquía de clase está bien.
Tengo una clase principal que es el JFrame. Aquí instancio el primer JDialog con:
Código:
Dialogo dlg= new Dialogo(frame);
Dentro de la clase Dialogo llamo a otra clase Reloj que al igual que la clase Dialogo hereda de JDialog.
Desde el primer JDialog abro el segundo con:
Código:
Reloj reloj = new Reloj(this);
Quiero que si está abierto dlg bloquee al JFrame y que no se pueda modificar nada en esa ventana hasta que se cierre dlg. Sin embargo, que si está abierto reloj se pueda interactuar con dlg.
Espero que me podáis orientar. Sigo buscando pero sin ningún resultado satisfactorio.
Un saludo
  #3 (permalink)  
Antiguo 09/07/2012, 05:44
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: JDialog secundario

No estoy seguro, pero me temo que un dialogo modal siempre estará por encima de otro no modal, aunque sea su hijo.

Intenta hacer una prueba tonta con un JFrame padre de JDialog modal padre de JDialog no modal, igual que los tienes y verificar si es posible.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 09/07/2012, 05:56
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: JDialog secundario

Hola chuidiang, no sé si te he entendido bien. Si te refieres a crear el primer JDialog hijo del JFrame y de tipo modal y el segundo no modal e hijo del primer JDialog es como lo tengo ahora mismo y se oculta detrás del diálogo modal.
Otra pregunta se podría hacer como he visto en algunas aplicaciones que la ventana de ayuda no es modal pero se puede actuar sobre ella. Sabes de algún ejemplo de esto último para probar.
Saludos
  #5 (permalink)  
Antiguo 09/07/2012, 06:40
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: JDialog secundario

Me refería a que hicieras un main() pequeñito con esas tres ventanas sin más para ver si es o no posible poner a la nieta no modal delante de la hija modal. Sé que es lo que tienes ahora en tu aplicación, pero el programa tonto te puede ayudar a descartar definitivamente esa opción (nieto no modal sobre hijo modal).

"La ventana de ayuda no es modal pero se puede actuar sobre ella". ¿Te refieres a una ventana de ayuda java que sale sobre un diálogo modal en java?. Me hace la impresión de que las ventanas de ayuda en general son JFrame o aplicaciones independientes. Prueba a poner tu nieto como un JFrame a ver qué pasa.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 10/07/2012, 04:27
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: JDialog secundario

Hola, he probado a crear una nueva aplicación como me dices pero el resultado es el mismo.
Entonces he decidido poner los dos JDialog como no modales. El problema que se me plantea ahora es si existe alguna forma de conocer si se ha abierto un JDialog y cerrado ese mismo desde otro JDialog o desde un JFrame. Saber si se ha abierto para que no se pueda volver a abrir otra instancia y si se ha cerrado para que se pueda volver a mostrar. Vaya, intentar hacer un modal manualmente, que deje interactuar con las ventanas pero por ejemplo que si se da a un botón que tiene que abrir otra ventana y ésta ya se encuentra abierta no la abra.
Saludos
  #7 (permalink)  
Antiguo 10/07/2012, 08:24
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: JDialog secundario

Puedes no crear la ventana cada vez que das al botón. El JDialog lo guardas en un atributo de la clase inicializado a null y el código del botón que lo muestra sería así

Código java:
Ver original
  1. public void actionPerformed(ActionEvent e) {
  2.    if (null==dialogo) {
  3.       dialogo = new ....
  4.    }
  5.    dialogo.setVisible(true);
  6.    dialogo.traer al frente.
  7. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 11/07/2012, 05:01
 
Fecha de Ingreso: junio-2012
Mensajes: 10
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: JDialog secundario

Lo estaba creando cada vez que lo llamaba. Comprobando lo que me has puesto ya sólo se crea la 1ª vez y no tengo el problema de tener cientos de ventanas.
Muchas gracias

Etiquetas: jdialog, secundario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:20.