2012-08-03 11 views
6

Tengo una clase SWING GUI que crea una instancia de un JPanel personalizado para una parte de la pantalla. Esta clase personalizada tiene botones y campos de texto, etc. Mi clase de GUI que posee el JPanel personalizado también tiene una clase de controlador que maneja la modificación de mis modelos de datos. ¿Cómo puedo pasar acciones desde el panel personalizado a su propietario (mi clase gui) para manejar los eventos?EventListeners y componentes personalizados de interfaz gráfica de usuario

He pensado que quizás pueda agregar a mi constructor del panel personalizado una referencia a mi clase de controlador en la interfaz gráfica de usuario para poder establecerlo como actionListener en mis botones. ¿Es aconsejable este enfoque? ¿Hay un mejor enfoque?

Respuesta

4

Su código View (su JPanel personalizado) debe tener un campo Controller (o alguna otra forma de obtener su clase de controlador). De esta forma, cuando reciba una acción del usuario, p. Ej. Haga clic con el mouse en un botón: puede llamar al controller.doTheAppropriateAction(). Pase el Controller en construcción, o use un patrón setter Javabean en él, y configúrelo justo después de la construcción en su lógica de inicio (que suena como su "clase GUI"). Prefiero el patrón Javabean, porque los Editores GUI no necesitan constructores de parámetros.

debería registrar su View como un Listener a las clases correspondientes Controller (o Model), por lo que automáticamente se le dijo que cuando algo cambia - por lo que puede repaint() sus Component s (o hacer algo más adelantado). Eso implicará la configuración de su propia interface (para el View para implementar) y la lógica de manejo de escucha en el Controller (o Model).

Lombok PG toma el texto estándar de este último.

akf da una alternativa: registre Controller como ActionListener a su código View. La ventaja de este enfoque es que su código View no estará vinculado a un Controller específico, pero la desventaja es que su Controller estará vinculado a su código View. Tiendo a reutilizar el código Controller para diferentes implementaciones de IU (por ejemplo, Swing, GWT, JSP) para que mis Controller sy Model s nunca dependan de ninguna acción particular del usuario View.

+0

+1 para una gran explicación – MadProgrammer

2

Puede pasar una referencia a su GUI principal como ActionListener a su panel personalizado. Su panel personalizado puede registrar su clase principal ActionListener -implementing con todos sus botones, etc.

Su clase principal recibiría una notificación sobre cada acción.

Cuestiones relacionadas