ventanas modal manejo formulario entre ejemplo diferencia swing modal-dialog nonblocking progressdialog

swing - modal - jdialog netbeans



Sin bloqueo de diálogo modal de Swing de diálogo. (2)

Debería usar GlassPane para evitar que el usuario interactúe. Lo bueno es que es modal para el usuario y no para tu programa, por lo que no se bloqueará tu hilo.

La buena noticia es que también puede usarlo para efectos de GUI geniales, como sombrear la parte de la GUI ocupada y el usuario no puede interactuar. También puede mostrar una imagen gif ocupada en el GlassPane.

Campo de golf:-

  1. Tutorial oficial en GlassPane
  2. Algunos tutoriales útiles
  3. Otro tut
  4. Swing Hacks de Oreilly es excelente.

Una pregunta tonta, pero realmente no puedo hacer que esto funcione: tengo un proceso de larga ejecución en una aplicación Swing que puede tardar varios minutos. Quiero mostrar un diálogo de progreso al usuario mientras este proceso está en curso. También quiero evitar que el usuario realice otras acciones, por ejemplo, al presionar un botón mientras el proceso está en marcha.

Si hago el proceso en el EDT, esto obviamente evita que el usuario final haga algo mientras el proceso está en marcha. Pero como la EDT está ocupada procesando, nunca se procesa el contenido del cuadro de diálogo, por lo que solo obtengo el esquema del cuadro de diálogo.

Pero si hago el proceso en un subproceso de trabajo, el usuario final puede hacer clic en los botones y hacer que la EDT manipule el estado que el trabajador también está manipulando al mismo tiempo, con cosas malas como consecuencia. Si hago el diálogo modal, eso no sucede, pero modal en Swing también implica bloqueo , por lo que en el momento en que llamo setVisible(true) , el hilo se bloquea para siempre.

Así que mi "solución" actual es usar un subproceso de trabajo y luego generar un subproceso separado cuyo único propósito es absorber la naturaleza de bloqueo de setVisible . ¡Seguramente debe haber una mejor solución!

Entonces, ¿cómo obtengo un cuadro de diálogo que impide que el usuario interactúe con el resto del sistema (modal) pero no bloquea el hilo que hace que sea visible?


Debes estar haciendo algo mal. Prueba el tutorial sobre cómo usar las barras de progreso . Si puede entender cómo funciona ese código, debería darle la dirección para lograr la función requerida.

Tenga en cuenta que las barras de progreso suelen ser modales.