Saltar a contenido

Aplicando MVC

Para trabajar con el modelo vista controlador, vamos a crear los siguientes elementos:

  • Para la clase controlador creamos un atributo que sea del tipo clase vista.

    public class CartasController { // Clase controlador
        private CartasApplication app;
        public CartasController(CartasApplication app) {
            this.app = app;
        }
    }
    
  • Para la clase vista, cread un objeto de clase controlador y le pasáis un this al constructor.

    public class CartasApplication extends Application { // Clase vista
        CartasController cont = new CartasController(this);
        protected TextArea areaTexto = new TextArea();
        protected Button boton = new Button();
    }
    
    De esta forma, estáis pasándole la vista al controlador. Es una forma de relacionarlos de forma cruzada. Ahora, si yo invoco al objeto app en la clase controlador, puedo acceder a todos los métodos y atributos de la clase vista.

Si se quiere una visión global del proyecto, se podría iniciar con los siguientes ficheros:

public class CartasController { // Clase controlador
    private CartasApplication app;

    public CartasController(CartasApplication app) {
        this.app = app;
    }
    EventHandler<MouseEvent> eventoPrueba = e -> {
        app.areaTexto.setText("Pongo texto desde controlador");
    };
}
public class CartasApplication extends Application { // Clase vista
    CartasController cont = new CartasController(this);
    protected TextArea areaTexto = new TextArea();
    protected Button boton = new Button();

    public static void main(String[] args) {
        launch();
    }

    @Override
    public void start(Stage stage) {
    }
}
Si yo quiero ahora, desde la clase vista, asignar un evento (definido en controlador) a un botón, implementaría:

public class CartasController { // Clase controlador
    private CartasApplication app;

    public CartasController(CartasApplication app) {
        this.app = app;
    }

    public void ponerTexto() {
        app.areaTexto.setText("Pongo texto desde controlador");
    }
    EventHandler<MouseEvent> eventoPrueba = e -> {
        // Eventos para el botón
    };
}
public class CartasApplication extends Application { // Clase vista
    CartasController cont = new CartasController(this);
    protected TextArea areaTexto = new TextArea();
    protected Button boton = new Button();

    public static void main(String[] args) {
        launch();
    }
    @Override
    public void start(Stage stage) {
        cont.ponerTexto(); // Ponemos texto a un text area desde el controlador
        // Ahora asignamos un evento
        boton.addEventHandler(MouseEvent.MOUSE_CLICKED, cont.eventoPrueba);
    }
}
Esto es una forma de trabajar de forma que se respete los principios del MVC sin mezclar clases.