Pregunta

¿Cómo puedo evitar que se muestre un diálogo cuando ya hay uno en la pantalla?

Detalles: En mi aplicación se ejecutan muchos temporizadores. Si se produce un error fatal, todos los subprocesos afectados mostrarán un JDialog (por swingx.JXErrorPane.showDialog ()), que no se desea. Incluso si cancelo todos los temporizadores en ejecución, aún aparecerán algunos diálogos al mismo tiempo. ¿Cómo puedo lograr que solo aparezca un diálogo?

Traté de hacer que el método que llama a showDialog () esté sincronizado, lo que hace que se bloquee mi GUI completa. El uso de una bandera tampoco funcionó.

¿Fue útil?

Solución

Convierta el diálogo en un observador y publique los eventos de error en este nuevo observador (consulte Patrón de diseño del observador ). Cuando ocurre un evento, el cuadro de diálogo debería mostrarse (con el marco principal como elemento principal). Mostrar los errores recientes en una tabla en el diálogo. Agrega nuevos errores al final de esa tabla.

Otra opción es mostrar los errores en una tabla en el marco principal. Coloque la tabla en un JSplitPane para que los usuarios puedan minimizarla.

Otros consejos

Otra opción sería convertir el diálogo en un singleton:

  • Dale al diálogo un constructor privado.
  • Crear una " instancia estática privada de MyDialog; " - atributo en la clase de diálogo.
  • Crear un " public StDialog getInstance () {...}; - método para devolver la instancia y crear una primera instancia si es nula.

Donde MyDialog debe ser el nombre de la clase de la ventana de diálogo.

Luego, cada vez que necesite mostrar el diálogo, simplemente consulte el singleton:

MyDialog.getInstance (). showDialog ();

Donde showDialog solo hace visible la ventana de diálogo.

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