Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia

26/12/11

Patrón MVC en Java con Netbeans

JAN29

El patrón MVC (Modelo, Vista, Controlador), es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz que ve el usuario de la logica del negocio en tres componentes distintos. Es más frecuente en aplicaciones Web que en aplicaciones de escritorio, sin embargo es aplicable tambien a este, sin ningun problema, Java ya contaba hace rato con Observer y Observable, herramientas que nos ayudan a la interacción entre la interfaz y el modelo, sin embargo, el ejemplo que dejamos a continuación no hace uso de estas herramientas.

La descripción del patrón MVC es:

  • Vista (View): Representa la interfaz de usuario y todas las herramientas con las cuales el usario hace uso del programa.
  • Modelo (Model): Es donde esta toda la lógica del negocio, la representación de todo el sistema incluido la interacción con una base de datos, si es que el programa asi lo requiere.
  • Controlador (Controller): Este componente es el que responde a la interacción (eventos) que hace el usuario en la interfaz y realiza las peticiones al modelo para pasar estos a la vista.
Aún no esta del todo claro, pero con el siguiente ejemplo, lo comprenderemos mejor.
El programa que realizaremos, es una aplicación trivial y sencilla, sin embargo nos ayudara a comprender mejor cual la forma de trabajo de este matrón MVC en Java, utilizaremos para esto, el IDE de Netbeans.

PROYECTO
1. Crea un nuevo proyecto en netbeans, para este ejemplo, el proyecto se llama "jc_mvc_demo". Crea una estructura de paquetes (Controller, Model, View), hacemos esto para separar cada componente, ser más organizados. Debes tener algo como esto.
Como puedes observar, mantenemos el paquete default junto al Main.java que nos crea netbeans, este main es el que nos servira como nuestro index.php de nuestra aplicación, nuestro "lanzador".

2. Empecemos creando la lógica de la aplicación, crea una nueva clase en el paquete Model, llamalo "modelo.java" y añade el siguiente codigo:


01 package model;
02 /**
03  * @web http://jc-mouse.blogspot.com/
04  * @author Mouse
05  * En esta clase se guarda la lógica del sistema, para este sencillo ejemplo
06  * consiste en una SUMA
07  */
08 public class modelo {
09     //Variables
10     private int valor1=28;
11     private int valor2=69;
12     private int total = sumar();
13 
14     public modelo(){}
15 
16     public void set_valor1(int val){
17         this.valor1=val;
18     }
19 
20     public int get_valor1(){
21         return this.valor1;
22     }
23 
24     public void set_valor2(int val){
25         this.valor2=val;
26     }
27 
28     public int get_valor2(){
29         return this.valor2;
30     }
31 
32     public int sumar(){
33         this.total =  this.valor1 + this.valor2;
34         return this.total;
35     }
36 
37     public int get_total(){
38         return this.total;
39     }
40 
41 }

Como vemos, nuestra modelo es sencillo, es nada más que la suma de dos valores enteros, con sus respectivos metodos. continuemos.

3. Diseñemos ahora la interfaz de usuario, nuestra VISTA.
Añade un JFrame al paquete VIEW, llamalo "vista.java", OJO los recuadros marcados con rojo, son los componentes que tendran interacción con el modelo, asi que para evitar confuciones, es mejor renombrarlos, coloca los nombres tal como se ven en la imagen de abajo.
Netbeans, al añadir objetos a nuestro JFrame, automaticamente los coloca como PRIVATE, debemos cambiar esto, para ello selecciona el objeto "vtxt1" y ve asus propiedades, en la pestala CODIGO, elige el campo MODIFICADORES DE VARIABLE, en la ventana que sale, cambia el atributo PRIVATE, por PUBLIC y dale a aceptar. Repite esta acción para todos los objetos que estan marcados con rojo en la imagen anterior.

3. Ahora continuamos con el CONTROLADOR de nuestra aplicación, crea una clase "controlador.java" en el paquete CONTROLLER, el codigo que debes colocar, es:


01 package controller;
02 
03 import java.awt.event.ActionEvent;
04 import java.awt.event.ActionListener;
05 import model.modelo;
06 import view.vista;
07 /**
08  * @web http://jc-mouse.blogspot.com/
09  * @author Mouse
10  */
11 public class controlador implements ActionListener{
12 
13     private vista vista;
14     private modelo modelo;
15 
16     //En el constructor inicializamos nuestros objetos y tambien
17     //añadimos el ActionListener al boton "cmdsumar" de la VISTA
18     public controlador( vista vista , modelo modelo){
19         this.vista = vista;
20         this.modelo = modelo;
21         this.vista.cmdsumar.addActionListener(this);
22     }
23 
24     //Inicia los valores del jFrame VISTA con los datos del MODELO
25     public void iniciar_vista(){
26         vista.setTitle( "Demo MVC * jc-mouse.net" );
27         vista.setLocationRelativeTo(null);
28         vista.vtxt1.setText( String.valueOf(modelo.get_valor1()) );
29         vista.vtxt2.setText( String.valueOf(modelo.get_valor2()) );
30         vista.vtxt3.setText( String.valueOf(modelo.get_total()) );
31     }
32 
33     //La accion del boton de la VISTA es capturado, asi como los valores de
34     //los jtextbox, entonces se realiza la funcion SUMAR y se actualiza
35     //el jtextbox correspondiente al resultado
36     public void actionPerformed(ActionEvent e) {
37         modelo.set_valor1( Integer.valueOf( vista.vtxt1.getText() ) );
38         modelo.set_valor2( Integer.valueOf( vista.vtxt2.getText() ) );
39         modelo.sumar();
40         vista.vtxt3.setText( String.valueOf(modelo.get_total()) );
41     }
42 
43 }

Explicación: nuestra clase controlador, implementa el ActionListener, esto para responder desde esta clase, los eventos realizados desde la interfaz (VISTA), ademas en el constructor de la clase, vemos que se pasan como parametros, la clase VISTA y la clase MODELO,nuestra clase ademas cuenta las funciones, INICIAR() la cual inicializa los valores de la interfaz, como ser el atributo titulo del JFrame, posicionamiento en pantalla, valores iniciales de los jtextbox, etc. tambien tenemos el método actión performed el cual capura el evento realizado desde la interfaz, en nuestro ejemplo es solo un CLICK EN EL BOTON DE MENU CMDSUMAR, obtiene los datos correspondientes e invoca al modelo para procesar la información y obtener una respuesta. Pues bueno, eso es todo, fijese como la interfaz para llegar al modelo, pasa por el controlador y visceversa, cuando el modelo necesita mostrar un dato, pasa por el controlador hasta llegar a la vista, esto claro no es una regla, puedes buscar en google y encontraras varias variaciones de este modelo.

4. Para terminar debemos implementar todo esto en nuestro main.java:


01 package jc_mvc_demo;
02 
03 import controller.controlador;
04 import model.modelo;
05 import view.vista;
06 /**
07 *  @web http://jc-mouse.blogspot.com/
08  * @author Mouse
09  */
10 public class Main {
11     
12     public static void main(String[] args) {
13 
14         //nuevas instancias de clase
15         modelo modelo = new modelo();
16         vista vista = new vista();        
17         controlador controlador = new controlador( vista , modelo );
18         //se inicia la vista
19         controlador.iniciar_vista();
20 
21         vista.setVisible(true);
22 
23     }
24 
25 }

Ejecuta el programa para terminar.
El patrón MVC, nos permite cambiar la interfaz de usuario (VISTA), sin tocar en lo absoluto el MODELO de la aplicación, y realizar pequeños cambios en el controlador, minimos cambios, como podemos observar en la imagen superior, tenemos la interfaz 1, la cual creamos en este tutorial, y ademas una segunda interfaz, totalmente distina, sin embargo funciona bajo el mismo MODELO.

Descarga  el ejemplo e investiga como cambiar la interfaz1 a la interfaz2

El proyecto completo, esta "AQUI"


Suerte :)

10 comentarios:

Anónimo dijo...

Muy bueno el aporte gracias

luiselpana dijo...

tus proyectos me han ayudado mucho, podrias hacer uno en el que utilizes collapsiblepane por favor?

Anónimo dijo...

Genial, muy buen aporte , gracias ;)

Anónimo dijo...

Muy buenos tutoriales amigo, pero tengo una duda.
¿como debería hacerlo cuando hay mas de un botón con distintas funciones?
gracias.

Anónimo dijo...

public void actionPerformed(ActionEvent e) {
modelo.set_valor1( Integer.valueOf( vista.vtxt1.getText() ) );
modelo.set_valor2( Integer.valueOf( vista.vtxt2.getText() ) );
if (e.getSource()==this.vista.cmdrestar) {
modelo.restar();
}
if (e.getSource()==this.vista.cmdsumar) {
modelo.sumar();
}
vista.vtxt3.setText( String.valueOf(modelo.get_total()) );

}

Ambar Quintana dijo...

Graciiiiiiiiias ;)

hug0 dijo...

Muy buen ejemplo, este sitio ha sido mi referencia para aprender Java.

Saludos.

Anónimo dijo...

Eres lo máximo vaya que tu ejemplo ayuda mucho

Anónimo dijo...

Att. Ricardo Ramirez de HONDURAS

Hermano es un buen ejemplo, esto del modelo MVC nos lo enseñaron hace poco en la U, y nos esta siendo de gran ayuda para realizar un sistema de una comercial agrícola, gracias por tu ayuda.

Bendiciones.

sondegibb dijo...

Excelente explicación y aporte.
Una consulta, tendrás el MVC con web usando NetBeans?

Post recomendado