paneles ejemplo java user-interface design-patterns swing

ejemplo - paneles java swing



¿Cómo se puede direccionar una GUI Swing/JFace/SWT? (4)

En Swing, puede usar CardLayout . Puede hacer que cada "página" sea una tarjeta, y el nombre de la tarjeta (elegido al agregar tarjetas al diseño) sería equivalente al URI que desea.

Ejemplo:

String PAGE_1_KEY = "page 1"; String PAGE_2_KEY = "page 2"; // as many keys as you need JFrame frame = ...; frame.setLayout(new CardLayout()); frame.add(createPage1(), PAGE_1_KEY); frame.add(createPage2(), PAGE_2_KEY); // etc.

Luego, en los oyentes de acción de tus botones, llamarías

((CardLayout)frame.getLayout()).show(frame, PAGE_1_KEY); // or whichever

Tengo una GUI "gorda" que se está volviendo bastante compleja, y me gustaría agregar enlaces de un lugar a otro, y agregar botones atrás / adelante para facilitar la navegación. Me parece que esto sería más fácil si mi aplicación fuera direccionable: cada compuesto podría tener su URI, y los enlaces usarían ese URI.

¿Hay patrones de diseño aplicables a este problema?

Podría ver el código fuente de Firefox o Eclipse, pero estos son proyectos enormes y tomaría bastante tiempo darle sentido, así que lo estoy preguntando aquí. ¿Hay algún ejemplo más simple en alguna parte?

Por supuesto, sería más simple si tuviera que crear una aplicación web en primer lugar, pero no voy a volver a escribir esta gran aplicación desde el principio.


Mi solución para hacer cosas como esta usualmente involucra el patrón del oyente . En pocas palabras, reduce el acoplamiento al proporcionar una forma de enviar y recibir eventos hacia y desde las partes interesadas (compuestos en este caso). Esto es bastante fácil de implementar, incluso cuando se realiza la retroadaptación. De esta forma, sus eventos y fiestas pueden cambiar sin cambiar el código dependiente.


Puede crear un registro "global" que asigne identificadores únicos a objetos (o tal vez nombres de clase). Estos objetos podrían ser JPanels, por ejemplo. Cuando el usuario hace clic en un enlace o botón, se notifica a algún controlador con la clave de la nueva página que se mostrará. Este controlador podría crear ese JPanel y colocarlo en el marco de la aplicación.


Mi último enfoque incluyó gerente global y registro de enlaces. Cada parte de UI pudo nombrarse a sí misma de manera única y registrarse. El gerente global conoce cada uno de ellos y luego utiliza algunos trabajos sucios para hacer que esta parte sea visible. La navegación hacia atrás / adelante fue realizada por un administrador especial de deshacer / rehacer. Cada "pantalla" pudo obtener el administrador de navegación y registrar su evento de "deshacer". Fue un trabajo duro para que funcione, pero la función resultante fue bastante útil. Hablamos sobre el uso de un servicio JNDI simple para ubicar y nombrar las piezas de UI. También puede ser útil para vincular.