Desarrollo  de  de  un  proyecto  M  –  V  –  C,  Java,  MySql  y  NetBeans 6.


En esta guía se creará una aplicación con acceso a bases de datos que permita gestionar los artículos y sus respectivos movimientos, será algo sencillo, pero sustancial, se aplicarán los patrones de diseños: Data Transfer Object (DTO), Data Access Object (DAO), Session Facade y Bussines delegate, todo esto para cumplir con el patron arquitectonico Modell - View - Controller.

Figura 1 Estructura de los casos de uso de la aplicación a desarrollar.

LIA. José Asunción Enríquez Zárate

asuncionez@hotmail.com

Página 1

Conceptos Básicos.
Patrón de Diseño Un patrón de diseño es una abstracción de una solución en un nivel alto. Los patrones solucionan problemas que existen en muchos niveles de abstracción. Hay patrones que abarcan las distintas etapas del desarrollo; desde el análisis hasta el diseño y desde la arquitectura hasta la implementación. Entonces un patrón de diseño es un conjunto de reglas que describen como afrontar tareas y solucionar problemas que surgen durante el desarrollo de software. Los patrones de diseño empezaron a reconocerse a partir de las descripciones de varios autores a principios de 1990, el cual culmina en el año 1995 con la publicación del libro "Design Patterns -- Elements of Reusable Software" de Gamma, Helm, Johnson y Vlissides; conocidos como GOF (Gang of Four, la pandilla de los 4).

modelo de datos.

Para la creación de la aplicación propuesta, se va a definir el siguiente

LIA. José Asunción Enríquez Zárate

asuncionez@hotmail.com

Página 2

El script sql de creación. DROP SCHEMA IF EXISTS EzjaMVC; CREATE SCHEMA IF NOT EXISTS EzjaMVC; USE EzjaMVC; CREATE TABLE IF NOT EXISTS Articulo ( claveArticulo CHAR(10) NOT NULL , descripcion VARCHAR(50) NOT NULL , precio DECIMAL(12,2) NOT NULL , existencias INT NOT NULL , PRIMARY KEY (claveArticulo)); CREATE TABLE IF NOT EXISTS Movimientos( folio CHAR(18) NOT NULL , fecha DATE NOT NULL , tipoMov CHAR(1) NOT NULL , cantidad INT NOT NULL , claveArticulo CHAR(10) NOT NULL , PRIMARY KEY (folio) , INDEX fk_Movimientos_Articulo (claveArticulo ASC) , CONSTRAINT fk_Movimientos_Articulo FOREIGN KEY (claveArticulo) REFERENCES Articulo (claveArticulo) ON DELETE CASCADE ON UPDATE CASCADE);

LIA. José Asunción Enríquez Zárate

asuncionez@hotmail.com

Página 3

Creación del la Bd

LIA. José Asunción Enríquez Zárate

asuncionez@hotmail.com

Página 4

José Asunción Enríquez Zárate asuncionez@hotmail. Archivo (File) 2. Asignar Nombre (EzjaMVC. iniciar el NetBeans. En las categorías elegir Java 4. para lo cual utilizaremos Netbeans 6.8 Por lo tanto.com Página 5 . En los proyectos Aplicación Java (Java Application) 5.Creación del Proyecto Una vez que se tiene creada la Base de Datos se procederá a crear el proyecto. el nombre que mas confianza le tengan). Nuevo Proyecto (New Project ) 3. LIA. y a partir de la pantalla inicial del IDE 1.

José Asunción Enríquez Zárate asuncionez@hotmail.6.com Página 6 . Terminar o Finish LIA.

delegate 5. com.ezjamvc.dto 2. José Asunción Enríquez Zárate asuncionez@hotmail.modelo.ezjamvc. com.modelo.modelo.facade 4. com.dao 3.ezjamvc.formularios LIA.ezjamvc. se crearan los siguientes paquetes: 1. para crear un paquete en NetBeans.com Página 7 .Una vez creado el proyecto el IDE muestra la siguiente pantalla Lo primero que haremos será crear la estructura de paquetes a utilizar en el proyecto.modelo. com.vista. com.ezjamvc.

4.Creación del paquete DTO El proceso de creación de los paquetes. Anotar el nombre del paquete 5. basta con seguir 1. José Asunción Enríquez Zárate asuncionez@hotmail.com Página 8 . Terminar Repetir el proceso para la creación de los demás paquetes: LIA. Paquete java (java package). Elegir la opción nuevo (new) 3. Clic secundario sobre el nodo paquetes de fuente o (sources packages) 2.

com Página 9 . José Asunción Enríquez Zárate asuncionez@hotmail.Creación del paquete DAO Creación del paquete facade LIA.

com Página 10 .Creación del paquete delegate Creación del paquete vista LIA. José Asunción Enríquez Zárate asuncionez@hotmail.

com Página 11 . la codificación se realizará de acuerdo al siguiente Diagrama de Clases. 4. LIA. Seleccionar el paquete com.Creación de la clase ArticuloDTO 1. 3.ezjamvc. 2.modelo.dto Clic secundario Nuevo Case java Ahora que tenemos la estructura de la clase ArticuloDTO. José Asunción Enríquez Zárate asuncionez@hotmail.

dto. public ArticuloDTO() { } public String getClaveArticulo() { return claveArticulo.Serializable.claveArticulo = claveArticulo. String descripcion. double precio. } LIA. } public void setClaveArticulo(String claveArticulo) { this. } public void setDescripcion(String descripcion) { this. } public void setExistencias(int existencias) { this. José Asunción Enríquez Zárate asuncionez@hotmail. } public String getDescripcion() { return descripcion. import java.io. package com.Por lo tanto la codificación de la clase quedaria de la siguiente forma. int existencias.ezjamvc.existencias = existencias. } public int getExistencias() { return existencias.modelo.descripcion = descripcion. /*** @author asuncion */ public class ArticuloDTO implements Serializable { private private private private String claveArticulo.com Página 12 .

append("Descripcion Articulo ").public double getPrecio() { return precio. sb. sb.append(getClaveArticulo()).append(getExistencias()).append("Existencias Articulo ").precio = precio. José Asunción Enríquez Zárate asuncionez@hotmail.append("Clave Articulo ").append(getDescripcion()).toString(). return sb. } } Diagrama de Clases de ArticuloDAO LIA. } @Override public String toString() { StringBuffer sb = new StringBuffer(). sb.append("\n").append("Precio Articulo ").append(getPrecio()). } public void setPrecio(double precio) { this. sb.append("\n").com Página 13 .append("\n").append("\n").

es el encargado de encapsular la lógica de acceso a bases de datos.com Página 14 . 2. 4. que de acuerdo con el patrón Data Access Object. del enlace de arriba y considerar las notas que pondre al final. José Asunción Enríquez Zárate asuncionez@hotmail.ezjamvc.dao Clic secundario Nuevo Clase java LIA.modelo. Aclarando solo mostrare una forma de hacerlo.De acuerdo con el diagrama. de preferencia seguir las indicaciones. 3. Creación de la clase ArticuloDAO 1. Seleccionar el paquete com. es necesario crear la clase ArticuloDAO.

ResultSet. ?)". ?.sql. java.com Página 15 . private static final String SQL_SELECT = "SELECT claveArticulo.dao. existencias " + " FROM Articulo where claveArticulo= ?". java.util. import import import import import java. José Asunción Enríquez Zárate asuncionez@hotmail.ezjamvc. precio = ?.dto.sql. java. existencias " + "FROM Articulo".ArrayList. package com. private static final String SQL_UPDATE = "UPDATE Articulo SET " + "descripcion = ?. private static final String SQL_SELECT_All = "SELECT claveArticulo.ArticuloDTO.Connection. LIA. /* SQL to delete data */ private static final String SQL_DELETE = "DELETE FROM Articulo WHERE " + "claveArticulo = ?". descripcion. descripcion.PreparedStatement. import java. descripcion. precio. precio.Por lo tanto la codificación de la clase quedaría de la siguiente forma. ?. /*** @author asuncion */ public class ArticuloDAO { private static final String SQL_INSERT = "INSERT INTO Articulo (" + "claveArticulo.sql.util. existencias = ?" + " WHERE " + "claveArticulo = ? ". precio. import com.SQLException. java.modelo. existencias" + ") VALUES (?.ezjamvc.modelo.List.sql.

getClaveArticulo()). rs = ps.executeQuery(). cerrar(conn).getExistencias()). List results = getResults(rs). Connection conn) throws SQLException { PreparedStatement ps = null. dto. } } LIA. ps. cerrar(ps). ps. ps.getPrecio()).com Página 16 . Connection conn) throws SQLException { PreparedStatement ps = null.setString(2. cerrar(conn).public void create(ArticuloDTO dto.setString(1. } } public ArticuloDTO load(ArticuloDTO dto. } else { return null.setString(1. dto.get(0).executeUpdate().setDouble(3.prepareStatement(SQL_INSERT). José Asunción Enríquez Zárate asuncionez@hotmail. dto. try { ps = conn. } } finally { cerrar(rs). } finally { cerrar(ps). if (results. dto. ps. ps. dto.getClaveArticulo()). ps.prepareStatement(SQL_SELECT).setInt(4. try { ps = conn.getDescripcion()). ResultSet rs = null.size() > 0) { return (ArticuloDTO) results.

prepareStatement(SQL_SELECT_All). try { ps = conn. ps. cerrar(ps). ResultSet rs = null.getPrecio()). dto. } } public void update(ArticuloDTO dto. ps. List results = getResults(rs).getExistencias()). ps.executeUpdate(). dto. José Asunción Enríquez Zárate asuncionez@hotmail.size() > 0) { return results.executeQuery().setString(4. Connection conn) throws SQLException { PreparedStatement ps = null. cerrar(conn). } } LIA. ps. if (results.prepareStatement(SQL_UPDATE).com Página 17 . dto.setDouble(2. cerrar(conn).setInt(3. ps. dto. } } finally { cerrar(rs). } finally { cerrar(ps).getDescripcion()). } else { return null.public List loadAll(Connection conn) throws SQLException { PreparedStatement ps = null.setString(1.getClaveArticulo()). rs = ps. try { ps = conn.

} finally { cerrar(ps).prepareStatement(SQL_DELETE).com Página 18 .setString(1. dto. ps. dto. ps.executeUpdate().close(). while (rs. results.setPrecio(rs. dto. } return results.getInt("existencias")).add(dto).setExistencias(rs.getClaveArticulo()). cerrar(conn). José Asunción Enríquez Zárate asuncionez@hotmail.next()) { ArticuloDTO dto = new ArticuloDTO().getString("descripcion")).public void delete(ArticuloDTO dto. } } private List getResults(ResultSet rs) throws SQLException { List results = new ArrayList().getDouble("precio")). } catch (SQLException e) { } } } LIA. dto. try { ps = conn. } private void cerrar(PreparedStatement ps) throws SQLException { if (ps != null) { try { ps. dto.setClaveArticulo(rs. Connection conn) throws SQLException { PreparedStatement ps = null.setDescripcion(rs.getString("claveArticulo")).

(solo para no aburrirse y ver que estamos haciendo y que realmente este funcionando.  aparece el siguiente cuadro LIA. José Asunción Enríquez Zárate asuncionez@hotmail. } catch (SQLException e) { } } } private void cerrar(Connection cnn) { if (cnn != null) { try { cnn.close(). se creará una clase java simple que utilice a ArticuloDAO y verificar el funcionamiento de las operaciones CRUD en nuestra base de datos). } catch (SQLException e) { } } } } Después de haber creado la clase ArticuloDAO.private void cerrar(ResultSet rs) { if (rs != null) { try { rs.com Página 19 . por lo tanto en la estructura del proyecto buscamos:  Bibliotecas(Libraries) ==> le damos clic con el botón derecho del mouse y elegimos la opción  Agregar Biblioteca. Lo primero es agregar a nuestro proyecto la librería para poder conectar con MySql.close().

La clase de prueba.com Página 20 . en el cual elegir la opción Driver MYSQL JDBC y con esto el proyecto ya podrá mantener comunicación con el servidor de bases de datos MySql. José Asunción Enríquez Zárate asuncionez@hotmail. botón derecho ==>nuevo ==>clase java. se creará en la raíz del proyecto así que basta con seleccionar el nodo paquetes de fuentes (sources packages) del proyecto. LIA.

util.setPrecio(5000).sql. import java.ezjamvc.setDescripcion("libreta"). String url = "jdbc:mysql://localhost:3306/EzjaMVC".util. /** @author asuncion */ public class PruebaDAO { public PruebaDAO() { } public static void main(String[] args) { /* * Solo para probar el funcionamiento */ Connection cnn = null. try { //Agregar un registro nuevo //dto.modelo.setExistencias(100). import java.DriverManager. LIA.jdbc. String mySqlDriver = "com.modelo.getConnection(url. cnn).forName(mySqlDriver).sql.com Página 21 .logging. cnn = DriverManager.sql. String pwd = "admin".create(dto.Logger.Level. } catch (Exception e) { e. import java. José Asunción Enríquez Zárate asuncionez@hotmail.El codigo es el siguiente: import com. //dao. import com.ezjamvc.dto. //dto.dao.logging. //Crear una instacia del DAO ArticuloDAO dao = new ArticuloDAO().ArticuloDTO. //dto. import java. } //Crear una Instacia del DTO ArticuloDTO dto = new ArticuloDTO(). String user = "root". try { Class.SQLException. //dto.ArticuloDAO.Driver".printStackTrace().setClaveArticulo("art100"). user. import java.mysql.Connection. pwd).

de la siguiente forma LIA. //dto. cnn). //dto = dao.setPrecio(5000). cnn). //dao. //Eliminar un registro //dto. cnn). //Mostrar un solo registro //dto. //System.println(dto).setDescripcion("lap hp ").out. //Listar los registros System. //dao.loadAll(cnn)). //dto.getLogger(PruebaDAO. null.setClaveArticulo("art100").out. //dto.setClaveArticulo("art100").setClaveArticulo("art100").load(dto. } } } El resultado aparece en la parte inferior del IDE. ex). } catch (SQLException ex) { Logger.println(dao.SEVERE.getName()).delete(dto.class.log(Level.//Actualizar un registro existente //dto. José Asunción Enríquez Zárate asuncionez@hotmail.com Página 22 .update(dto.setExistencias(100).

Según sea el caso de las opciones que decomenten para ejecutar. LIA. serán los resultados que se obtendrán en la bd. José Asunción Enríquez Zárate asuncionez@hotmail. Nota. ya que en cada una de ellas se abre y se cierra la conexión al inicio y al final respectivamente. decomentar solo una acción a la vez.com Página 23 .

José Asunción Enríquez Zárate asuncionez@hotmail. después se elimina.com Página 24 . actualizar. LIA. de cómo se comentaron las acciones. según la secuencia. buscar eliminar y mostrar todos. crear.Esta imagen muestra como en la base de datos se actualizan los datos de art100.

html. Seleccionar el paquete com. José Asunción Enríquez Zárate asuncionez@hotmail.sun. iniciaremos con la clase ArticuloFacade del paquete facade.com Página 25 .Creación de las clases del paquete facade Ahora continuando con el proyecto se crearan las clases correspondientes al patrón facade y delegate. Creación de la clase ArticuloFacade 1. 4.com/blueprints/corej2eepatterns/Patterns/SessionFacad e. 3. Para más información ir a http://java. 2.facade Clic secundario Nuevo Clase java LIA.ezjamvc.modelo.

dao = new ArticuloDAO(). } public void elimina(ArticuloDTO dto)throws SQLException { dao. José Asunción Enríquez Zárate asuncionez@hotmail.sql.cnn = cnn.ezjamvc. cnn).ArticuloDTO.loadAll(cnn).util.SQLException. package com.sql. com. } } LIA. java. public ArticuloFacade(Connection cnn) { this.modelo.ezjamvc.ArticuloDAO.modelo. } public ArticuloDTO leer(ArticuloDTO dto)throws SQLException { return dao. /** @author asuncion */ public class ArticuloFacade { private Connection cnn. java. private ArticuloDAO dao. } public List listar() throws SQLException { return dao.List.dto.create(dto.update(dto.delete(dto. } public void actualiza(ArticuloDTO dto)throws SQLException { dao. } public void crear(ArticuloDTO dto) throws SQLException { dao.facade.load(dto.ezjamvc. cnn).dao.com Página 26 .modelo.Connection. cnn). java. import import import import import com. cnn).Por lo tanto la codificación de la clase quedaría de la siguiente forma.

sun. 3. Seleccionar el paquete com. Creación de la clase correspondiente al paquete delegate Ahora se crearan la clase correspondiente al patrón delegate.Lo interesante de esta clase es que el constructor recibe como parámetro la conexión a la base de datos.com Página 27 .delegate Clic secundario Nuevo Clase java LIA. José Asunción Enríquez Zárate asuncionez@hotmail. es la ruta de entrada a la aplicación.modelo. Creación de la clase EzjaMVCDelegate 1. 2.com/blueprints/corej2eepatterns/Patterns/BusinessDele gate.html. es la clase que agrupara las acciones para cada uno de los módulos de la aplicación.ezjamvc. 4. Para más información ir a http://java. la clase EzjaMVCDelegate del paquete delegate.

modelo.dto. import com.ezjamvc.util. import import import import java. José Asunción Enríquez Zárate asuncionez@hotmail.Por lo tanto la codificación de la clase quedaría de la siguiente forma. private ArticuloFacade artFacade. java.ArticuloDTO. package com.sql.SQLException. /** * * @author asuncion */ public class EzjaMVCDelegate { private Connection cnn. java.com Página 28 .ArticuloFacade.List.modelo.sql. java.delegate.DriverManager.Connection.ezjamvc. LIA.sql.modelo. import com.ezjamvc.facade.

try { Class.crear(dto).listar(). } public List listarArticulos() throws SQLException { return artFacade. String mySqlDriver = "com. pwd).getConnection(url.actualiza(dto).forName(mySqlDriver).elimina(dto). } //Codigo para los Articulos public void crearArticulo(ArticuloDTO dto) throws SQLException { artFacade.mysql.com Página 29 .printStackTrace(). } catch (Exception e) { e.leer(dto). } public void elimina(ArticuloDTO dto) throws SQLException { artFacade. } artFacade = new ArticuloFacade(cnn). José Asunción Enríquez Zárate asuncionez@hotmail. } public void actualiza(ArticuloDTO dto) throws SQLException { artFacade. } public ArticuloDTO leerArticulo(ArticuloDTO dto) throws SQLException { return artFacade.public EzjaMVCDelegate() { String user = "root". String url = "jdbc:mysql://localhost:3306/EzjaMVC". } } LIA. String pwd = "admin".Driver". user. cnn = DriverManager.jdbc.

LIA. Nota: No es recomendable indicar los datos de la conexión dentro del código java (código Duro). Estructura final de la aplicación. se obtiene una conexión a la base de datos. xml. nos podemos dar cuenta que al momento de definir el constructor. José Asunción Enríquez Zárate asuncionez@hotmail. etc). lo más elegante sería ponerlo en un archivo de configuración. Diagrama de Clases. la cual se pasa como parámetro a la instancia de ArticuloFacade que se crea.Al revisar el código. del color que más les guste (archivo properties.com Página 30 .

util.setClaveArticulo("art1000").Level.setDescripcion("lap hp ").setDescripcion("libreta").EzjaMVCDelegate.logging.crearArticulo(dto).logging. //dto.modelo.dto. utilizando ya la clase que implementa el patrón delegate.util.com Página 31 .setExistencias(100).setClaveArticulo("art1000"). import java.SQLException.elimina(dto).modelo. ArticuloDTO dto = new ArticuloDTO(). // del.setPrecio(5000). try { //Agregar un registro nuevo //dto.delegate.Logger. //dto.Ahora modificaremos ligeramente la clase de prueba para verificar el funcionamiento de la aplicación.setExistencias(100).formularios. José Asunción Enríquez Zárate asuncionez@hotmail. //del. //Eliminar un registro //dto. //dto. LIA. import java. import com. package com. //dto.vista. import com. //Actualizar un registro existente //dto.ezjamvc. import java.setClaveArticulo("art1000").ArticuloDTO. //dto. /** @author asuncion */ public class PruebaDelegate { public PruebaDelegate() { } public static void main(String[] args) { EzjaMVCDelegate del = new EzjaMVCDelegate().ezjamvc.ezjamvc. //dto. //del.sql.setPrecio(5000).actualiza(dto).

leerArticulo(dto). por lo tanto: 1.formularios 2. lo primero es crear un formulario JFrame.class.vista. Seleccionar el paquete com. //dto = del.listarArticulos()). //System.log(Level. José Asunción Enríquez Zárate asuncionez@hotmail.SEVERE.ezjamvc.getLogger(PruebaDelegate.setClaveArticulo("art1000").println(del.com Página 32 . Seleccionarla opción Nuevo  Formulario JFrame LIA. } } } Creación de la Interfaz Grafica de Usuario (GUI) Para crear la interfaz grafica de usuario. Clic secundario 3.//Mostrar un solo registro //dto. //Listar los registros System.println(dto). null. } catch (SQLException ex) { Logger. ex).out.out.getName()).

aquí se encuentran todos los componentes que se pueden agregar al formulario (Cuadros de texto. Opción para mostrar el código fuente del formulario. 5. Tablas. con solo arrastrar y soltar. Después de haber creado la clase ArticuloForm aparece en pantalla el diseñador de formularios Matisse. como el nombre. José Asunción Enríquez Zárate asuncionez@hotmail. Siendo sus partes las siguientes 1. Cuadro de controles. Etiquetas. etc. y verificar que los datos mostrados sean los correctos Clic en Terminar. Opción para mostrar el diseño formulario. LIA. desde aquí es posible modificar las propiedades (características) del componente (objeto) seleccionado. aquí es en donde se insertaran los controles que darán forma al formulario. 3.Basta con asignarle nombre. 4. si previamente se está en la vista código fuente. Área de trabajo. 2. Cuadro de propiedades. el cual permite diseñar una interfaz grafica de usuario con solo hacer clic arrastrar y soltar componentes (Drag & Drog). si previamente se está en la vista diseño de formulario. etc.). tipo de fuente.com Página 33 .

Partes del Diseñador de Interfaces Graficas (Matisse) 2 4 5 6 1 3 LIA. José Asunción Enríquez Zárate asuncionez@hotmail.com Página 34 .

Una vez que se ha identificado cada una de las partes del diseñador de interfaces graficas de usuario. José Asunción Enríquez Zárate asuncionez@hotmail.El conjunto de herramientas que se pueden utilizar para diseñar un formulario es el siguiente.com Página 35 . LIA. se procede a crear la interfaz de Artículo.

José Asunción Enríquez Zárate asuncionez@hotmail. para las operaciones de creación de 1 nuevo registro.  4 Etiquetas (JLabel). las etiquetas. una vez localizado darle clic y dibujarlo en el área del formulario (no es necesario arrastrar y soltar solo clic y soltar). Quedando así LIA. .Creación del formulario para Articulo (ArticuloForm) Recordando el diagrama de clases ArticuloDTO o el modelo de la base de datos.  4 Cuadros de Texto(Text Box)  3 Botones (JButton). y buscar el control label . Lo primero agregar.com Página 36 . búsqueda de registro y actualización del mismo. tendremos. para ello en el cuadro de herramientas ubicar el nodo controles swing (en este nodo se encuentran todos los controles que se utilizaran en este formulario).

darle clic y dibujarlo en el formulario. Quedando de la siguiente manera. en el nodo swing controls del cuadro de herramientas clic en el control botón (JButton) . Por último agregar los botones. José Asunción Enríquez Zárate asuncionez@hotmail.com Página 37 . en el nodo swing controls del cuadro de herramientas clic en el control campo de texto (Text Field). darle clic y dibujarlo en el formulario. Quedando de la siguiente manera. LIA.Ahora agregar los cuadros de texto.

com Página 38 . darle clic con el botón derecho y elegir la opción Editar texto. con los siguientes valores. José Asunción Enríquez Zárate asuncionez@hotmail. los cuadros de texto y los botones. Modificar el texto de las etiquetas. Valor Original jLabel1 jLabel2 jLabel3 jLabel4 jTextField1 jTextField2 jTextField3 jTextField4 jButton1 jButton2 jButton3 Nuevo Valor Clave Articulo Descripción Precio Existencias En Blanco En Blanco En Blanco En Blanco Nuevo Buscar Actualizar LIA.Para cambiarle el texto a cualquier control. basta con seleccionarlo.

darle clic con el botón derecho y elegir la opción Editar texto. Para cambiarle el nombre a cualquier control. Lo ideal es cambiarles el nombre a cada control. jTextField1.Obteniendo como resultado lo siguiente. cada control aun conservan los nombres por defecto: jButton1. etc.com Página 39 . LIA. jLabel1. basta con seleccionarlo. Ahora. José Asunción Enríquez Zárate asuncionez@hotmail.

Valor Original jLabel1 jLabel2 jLabel3 jLabel4 jTextField1 jTextField2 jTextField3 jTextField4 jButton1 jButton2 jButton3 Nuevo Valor jlbClaveArticulo jlbDescripcion jlbPrecio jlbExistencia jtfClaveArticulo jtfDescripcion jtfPrecio jtfExistencias jbtNuevo jbtBuscar jbtActualizar Una vez realizado lo anterior ya es posible programar la funcionalidad de cada uno de los botones.Modificar el nombre de las etiquetas. con los siguientes valores. se hace la declaración de un Look & Feel. LIA. José Asunción Enríquez Zárate asuncionez@hotmail.com Página 40 . es decir declarar como atributos privados una instancia del EzjaMVCDelegate e inicializarlo en null. solo por darle presentación. además. los cuadros de texto y los botones. como primer paso es necesario darle funcionalidad al formulario desde código. es un tema para la aplicación . ArticuloDTO e inicializarlo en el constructor.

por medio de un Action Performed o de un Mouse clicked. LIA. José Asunción Enríquez Zárate asuncionez@hotmail.com Página 41 . Hay dos formas de programar la funcionalidad.Después de ello a programar que funcionalidad tendrán cada uno de los botones como respuesta a un evento por parte del usuario.

José Asunción Enríquez Zárate asuncionez@hotmail.  166. A la instancia de ArticuloDTO llamada dto se le asigna el valor contenido en el cuadro de texto correspondiente a la Descripción del Artículo.parseInt(valor). Nota: Si los atributos en el dto son de tipo diferente a texto. Entre estas líneas debiera de ir el código correspondiente al tratamiento del error. es necesario realizar un casting. para convertir el valor obtenido del cuadro de texto que es de tipo String a su correspondiente valor numérico.  169. Se crea la instancia física de la clase EzjaMVCDelegate. A la instancia de ArticuloDTO llamada dto se le asigna el valor contenido en el cuadro de texto correspondiente a la existencia del Artículo. solo basta con poner el nombre del cuadro de texto y llamar al método getText().  167.Código del botón Nuevo Explicación por Líneas de código  165. Nota: Si los atributos en el dto son de tipo texto. hace una llamada al método LIA. El bloque try – catch.  176 – 181. debido a que todo cuadro de texto regresa una cadena de texto. en este caso Integer. A la instancia de ArticuloDTO llamada dto se le asigna el valor contenido en el cuadro de texto correspondiente a la clave del Artículo.  170 – 171.com Página 42 .

crearArticulo. la cual conoce el valor de la clave del articulo a buscar. es decir trae valores. que es el único campo necesario para realizar la búsqueda.com Página 43 . llamada dto. es decir no trae nada que nos LIA. A la instancia de ArticuloDTO llamada dto se le asigna el valor contenido en el cuadro de texto correspondiente a la clave del Artículo..  186. José Asunción Enríquez Zárate asuncionez@hotmail.  189.si la instancia del dto es diferente de null. para poder ser procesada. el cual se le asigna a la instancia misma del dto. regresa una instancia de ArticuloDTO (un registro de la tabla en la base de datos). en caso contrario si es null. Se crea la instancia física de la clase EzjaMVCDelegate. Código del botón Buscar Explicación por Líneas de código  185.Se ejecuta el método leerArticulo de la clase delegate pasando como parámetro la instancia de la clase ArticuloDTO. con dichos valores. se procederá a llenar los cuadros de texto. el método leerArticulo.. Inicia el bloque try – catch.  188. y solo aparece una traza en modo consola.  187 – 198. en caso de algún error se lanza la excepción correspondiente la cual es tratada en la línea 179 – 180. de la clase delegate (línea 177).

pero si son de algún valor numérico del tipo que sea es necesario pasarlos a cadena con String. En caso de algún error se lanza la excepción correspondiente la aparece una traza en modo consola. se hace la asignación de los valores que trae el objeto dto. pero es aquí en donde sería conveniente mostrar algún mensaje avisando que no s encontraron datos.interese. José Asunción Enríquez Zárate asuncionez@hotmail.valueOf (191 – 192)  195 – 198.194).  En las líneas 190 – 192. Código del botón Actualizar LIA. a los cuadros de texto. no hará nada (193 .com Página 44 . se asignan de forma directa (190). considerando que si son valores de tipo cadena (String).

el cual por ser un número entero. el cual por ser un número fraccionario. Inicia el bloque try – catch.En caso de algún error se lanza la excepción correspondiente la aparece una traza en modo consola..  214. ya que el valor del cuadro de texto es de tipo String..219. LIA.Explicación por Líneas de código  213.Inicia el bloque try – catch. es necesario realizar un parsing Integer.  227. es necesario realizar un parsing Double.  224 -229. para agregar el precio. para agregar la existencia. ya que el valor del cuadro de texto es de tipo String. llamada dto.  216 .parseInt.  220 – 223.com Página 45 . A la instancia de ArticuloDTO llamada dto se le asigna el valor contenido en el cuadro de texto correspondiente a la clave del Artículo y a su descripción (215).parseDouble. José Asunción Enríquez Zárate asuncionez@hotmail. Se crea la instancia física de la clase EzjaMVCDelegate. Se ejecuta el método actualiza de la clase delegate pasando como parámetro la instancia de la clase ArticuloDTO.

Sign up to vote on this title
UsefulNot useful