Herramientas de usuario

Herramientas del sitio


bloque4:mvc

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:mvc [12/03/2018 10:44] Fernando Valdeónbloque4:mvc [16/09/2024 20:53] (actual) – editor externo 127.0.0.1
Línea 9: Línea 9:
   * El **controlador** es la capa que comunica a las otras dos. Al llamar a su constructor, se le pasar como parámetro una instancia de la vista, y otra del modelo. El controlador es quien tiene implementados los manejadores de eventos y se los añade a los componentes de la vista indicados, y también es quien ejecuta las operaciones del modelo en respuesta a esos eventos.    * El **controlador** es la capa que comunica a las otras dos. Al llamar a su constructor, se le pasar como parámetro una instancia de la vista, y otra del modelo. El controlador es quien tiene implementados los manejadores de eventos y se los añade a los componentes de la vista indicados, y también es quien ejecuta las operaciones del modelo en respuesta a esos eventos. 
  
-Resulta aconsejable que al menos las clases que representan el modelo, la vista y el controlador estén dentro del mismo paquete (''package''). +Resulta aconsejable que al menos las clases que representan el modelo, la vista y el controlador **estén dentro del mismo paquete** (''package''). 
  
 ===== Vista ===== ===== Vista =====
Línea 19: Línea 19:
     JTextField textNombre;     JTextField textNombre;
     JTextField textApellidos;     JTextField textApellidos;
-    ... //Todos los componentes swing que gestione desde el controlador+    ...  
 +    //Todos los componentes swing que gestione desde el controlador
                  
                  
Línea 30: Línea 31:
         setTitle("Mi Aplicacion");         setTitle("Mi Aplicacion");
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        ... //resto del código generado por WindowBuilder+        ...  
 +        //resto del código generado por WindowBuilder
                  
         set visible(true);         set visible(true);
Línea 36: Línea 38:
 } }
 </code> </code>
 +
 +
 +
 +===== Modelo =====
 +El modelo es la clase que maneja los datos de la aplicación y permite las operaciones.
 +Los puede obtener desde un fichero o desde una base de datos. Puede cargar esos datos en una estructura como el ArrayList o leerlos cada vez. No tiene ningún conocimiento ni interacción con la vista, y devuelve y recibe los datos tal cual se los pide el controlador.
 +
 +<code java>
 +public class Modelo{
 +   //Lista con los datos que gestiona mi aplicación
 +   private ArrayList<Persona> listaPersonas;
 +   ...
 +   
 +   public Modelo(){
 +      listaPersonas = new ArrayList<Persona>;
 +   }
 +   
 +   
 +   //Métodos para acceder a los datos
 +   public ArrayList<Persona> obtenerPersonas(){
 +      return listaPersonas;
 +   }
 +   
 +   
 +   //Operaciones sobre los datos
 +   public void altaPersona(String nombre, int edad){
 +       Persona nuevaPersona = new Persona(nombre, edad);
 +       listaPersonas.add(nuevaPersona);
 +   }
 +   
 +   ...
 +   
 +}
 +</code>
 +
  
 ===== Controlador ===== ===== Controlador =====
Línea 69: Línea 106:
 </code> </code>
  
-===== Modelo ===== +==== Controlador implementando interfaces ==== 
-El modelo es la clase que maneja los datos de la aplicación y permite las operaciones. +Otra forma mucho más elegante de implementar la clase Controlador es haciendo que trabaje como **Listener** de ciertos tipos de eventos. Para eso haremos que la clase implemente las distintas ''interfaces'' de cada tipo de eventoEn el caso siguiente implementamos la interfaz ''ActionListener''que ofrece soporte para los eventos de tipo ''ActionEvent''.
-Los puede obtener desde un fichero o desde una base de datos. Puede cargar esos datos en una estructura como el ArrayList o leerlos cada vezNo tiene ningún conocimiento ni interacción con la vistay devuelve y recibe los datos tal cual se los pide el controlador.+
  
 <code java> <code java>
-public class Modelo+public class Controlador implements ActionListener
-   //Lista con los datos que gestiona mi aplicación +    private Vista vista; 
-   private ArrayList<Persona> listaPersonas+    private Modelo modelo
-   ... +     
-    +    //Constructor recibe instancia de la vista y del modelo 
-   public Modelo(){ +    public Controlador(Vista vista, Modelo modelo){ 
-      listaPersonas new ArrayList<Persona>+        this.vista vista
-   } +        this.modelo = modelo; 
-    +         
-    +        asociarListeners(this); 
-   //Métodos para acceder a los datos +    } 
-   public ArrayList<Persona> obtenerPersonas(){ +     
-      return listaPersonas+    //Metodo que asocia esta clase como listener de los botones 
-   +    public void asociarListeners(ActionListener listener){ 
-    +       vista.botonNuevo.addActionListener(listener)
-    +       vista.botonEliminar.addActionListener(listener); 
-   //Operaciones sobre los datos +    
-   public void altaPersona(String nombre, int edad){ +     
-       Persona nuevaPersona new Persona(nombre, edad); +    //Metodo que la interface ActionListener obliga a implementar 
-       listaPersonas.add(nuevaPersona); +    //Es el encargado de gestionar los eventos ActionEvent de los botones 
-   } +    @Override 
-    +    public void actionPerformed(ActionEvent evt) { 
-   ... +       String comando evt.getActionCommand(); 
-   +        
 +       switch(comando)
 +          case "nuevo": 
 +             //codigo para el boton nuevo 
 +             break
 +          case "eliminar": 
 +             //codigo para el boton eliminar 
 +             break; 
 +              
 +          ... 
 +       } 
 +    } 
 +    
 } }
 </code> </code>
 +
  
 ===== Lanzar la aplicación ===== ===== Lanzar la aplicación =====
bloque4/mvc.1520851497.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)