6

Recientemente me he encontrado con un problema al intentar implementar Model-View-Controller en Swing.Cómo evitar acoplar la Vista y el Controlador en Swing

Tengo una clase de GUI que consta de subpaneles, y esos subpaneles constan de otros subpaneles. Ahora en uno de estos paneles sub-sub hay un JButton. En el ActionListener para este JButton quiero llamar a un método en el controlador. Para hacer esto, necesitaría pasar el controlador profundamente en las entrañas de la GUI al subpanel secundario donde reside JButton. Luego, en este subpanel secundario, tendría que adjuntar un ActionListener al JButton y completar el actionPerformed() llamando al método que quería llamar en el controlador.

Estoy seguro de que todos ven el problema. ¿Hay alguna buena manera de evitar pasar el controlador profundamente en las entrañas de la GUI?

Mi único pensamiento fue convertir el controlador en un singleton para desacoplarlo de la vista, pero he oído que los singleton son generalmente malvados.

Cualquier consejo sobre este asunto sería muy apreciado. ¡Gracias por adelantado!

Respuesta

4

En lugar de pasar en una referencia al controlador, que el controlador escuchar a la vista, como lo sugiere el asociación indirecta representado here. Agregar un PropertyChangeListener, ilustrado here, es ideal para esto. Cuando la vista necesita llamar al controlador, simplemente invoca firePropertyChange().

Un enfoque más conveniente es dar al controlador una vista separada para ciertas operaciones como el método reset() que se muestra here.

Cuestiones relacionadas