MVC con Swing

Sleidom

Muy buenas!

Llevo tiempo dándole vueltas a como utilizar MVC con Swing. Siempre que he hecho algún programa a través de consola con MVC me limito a llamar funciones del modelo con el controller y pasárselas a la vista llamando al método correspondiente esperando que devuelva algo.

Mi pregunta es, como hago esto con Swing? Un ejemplo podría ser algo así:

Tengo un String en el modelo y en la vista tengo un JTextField donde escribir una nueva frase y un JButton que al hacerle click, el controller debería recoger lo que hay en el JTextField y mandárselo al modelo para que lo actualice y el usuario pueda ver la nueva frase.

Mi propósito con todo esto es que si en cualquier momento decido cambiar la vista no tenga que tocar en ningún momento nada del modelo y del controlador en el caso mas ideal.

Saludos :D

Lecherito

#1 Para mi la forma más sencilla es que en la clase vista tengas un método que actualice ese JTextField. Por lo que:

Tu tiene la clase Ventana que tiene tu JTextField statusMessage; y un método setStatusMessage(String message);,

Para inicializarlo lo puedes hacer del tipo

private JTextField statusMessage;
private JButton boton;
Ventana() {
  statusMessage = new JTextField();
  boton = new JButton("Pulsame");
  boton.addActionListener(new SetStatusMessage(this));
}

Luego creas la clase SetStatusMessage (yo normalmente hago una por cada listener [o una estática con muchas])

public class SetStatusMessage implements ActionListener {
  Ventana ventana;
  SetStatusMessage(Ventana v) {
    this.ventana=v;
  }
  public void ActionPerformed(Event e) {
    ventana.setStatusMessage(archivo.leerStatusMessage()) //Por ejemplo
  }
}

Más o menos es así como lo hago yo, así si cambias la vista, o la creas de 0 lo tendrás todo.

Usuarios habituales

  • Lecherito
  • Sleidom