Patrón de diseño para la gestión de ventanas en una aplicación Java Swing

9

Acabo de comenzar a crear mi primera pequeña aplicación Java Swing. Cuando se abre el programa, muestra una ventana única y simple con una etiqueta y un par de botones. Se supone que hacer clic en uno de esos botones borrará la pantalla de bienvenida y lo reemplazará con un panel totalmente diferente.

No estoy seguro de cuál es la mejor manera de crear esa funcionalidad. Un método sería pasar mi JFrameargumento a ... casi cualquier otro componente, pero eso me parece raro. O bien, cada panel se duplica como un oyente de acción, pero eso tampoco parece correcto.

¿Hay algún patrón de diseño que deba aplicar aquí? "Reemplazar el contenido de la ventana principal (y única)" debe ser una operación razonablemente común. Un nombre para el patrón sería suficiente; Desde allí puedo usar Google por mi cuenta. (Sin embargo, no diría que no a una explicación más larga).

Estallidos
fuente
Al tratarse de una pregunta sobre técnicas de programación reales, es probable que obtenga muchas más respuestas en Stack Overflow.
Alex Feinman

Respuestas:

6

Cuando construyo aplicaciones Swing, generalmente lo baso en el patrón de mediador. En este patrón, una clase de Mediador (generalmente el JFrame principal) maneja las diferentes partes de la GUI (generalmente los JPanels, JMenus ...) y se encarga de la comunicación entre ellos.

Por ejemplo, si ocurrió un evento en JPanel1, JPanel1 notifica al mediador (el JFrame). JFrame luego toma medidas modificando JPanel2.

FYI: todos mis proyectos fueron aplicaciones GUI pequeñas a medianas, por lo que no estoy seguro de que estos patrones se escalen bien. Pero si pudiera diseñar una arquitectura adecuada, el patrón Mediator puede ser una base sólida.

S.S
fuente
4

Puede hacer que el método principal muestre un JDialog. Cuando se cierra el cuadro de diálogo, se crea y se muestra el JFrame principal.

JDialog le ofrece métodos estáticos fáciles de usar que muestran un cuadro de diálogo con contenido y botones personalizados, y devuelve el código del botón en el que se hizo clic. Al probar este valor, su método principal puede decidir mostrar el marco principal o salir (o cualquier otra cosa). Por favor lea el Javadoc.

A diferencia de algunos marcos de interfaz de usuario anteriores, una aplicación Swing no está vinculada a un marco o ventana específicos. Puede crear tantas ventanas como desee. La aplicación finaliza cuando finalizan todos los subprocesos, no cuando se han eliminado todas las ventanas. Esto normalmente se logra con System.exit (0).

No sé si hay un patrón de diseño específico para ese caso. Recomiendo el tutorial de Java Swing.

Laurent Pireyn
fuente
1
-1. Esta es una pregunta de patrón de diseño. Recomendar cambiar las especificaciones que me dieron y terminar con "No sé si hay un patrón de diseño específico" no responde.
Aparece el
2
Su respuesta es muy precisa. No tiene un problema de patrón de diseño, necesita aprender cómo funcionan primero los formularios y los diálogos.
Alex
2

Muchos marcos de IU tienen reglas diferentes con respecto a la ventana 'principal' o 'activa'. Una forma de gestionar esa complejidad es tener su ventana principal, que controla el bucle principal de mensajes, para que sea invisible (o pequeña, sin cromo de 1 píxel, fuera de la pantalla para los marcos particularmente molestos). luego haga que todas las demás ventanas y cuadros de diálogo sean hijos de esa ventana.

Este método tiene muchas ventajas, especialmente cuando se trata de pulsaciones de teclas globales y eventos de mouse, así como en el registro de nivel superior y el manejo de excepciones.

Neal Tibrewala
fuente