Sunteți pe pagina 1din 318

Ingeniera del Software II Gua de Programacin

lde BORARRADOR GUIA DE PROGRAMACION EN JAVA - AVANCES

Pasos a seguir

Lo primero que tenemos que hacer una vez instalado el IDE Netbeans, en mi caso estoy usando la
version 6.9, es crear un nuevo proyecto, para ello nos vamos en Archivo => Proyecto Nuevo

Esta opcin nos lleva a la ventana de Proyecto Nuevo donde elegimos la opcin Java = > Aplicacin Java,
clic en el botn Siguiente.

Este botn nos lleva a la ventana de Nueva Aplicacin Java que tiene dos pasos:

Miguel Angel Recalde. Pgina 1


Ingeniera del Software II Gua de Programacin

1- Seleccionar el proyecto: Aqu asignamos el nombre del proyecto, en nuestro caso systok pero
ustedes pueden aprovechar y poner el nombre de su proyecto.
2- Muy importante, se recomienda crear antes una carpeta en el disco C, en este caso lo llame
systock, entonces en Ubicacin de proyecto elegimos el botn Examinar y buscamos esa carpeta
creada, tambin dejamos desmarcado las check box Crear clase principal y Configurar como
proyecto principal, luego clic en el botn Terminar.

Esto nos lleva a la ventana principal del proyecto donde podemos ver el nuevo proyecto creado.

Miguel Angel Recalde. Pgina 2


Ingeniera del Software II Gua de Programacin

Podemos ver los archivos creados en la carpeta systock

El siguiente paso es crear nuestra ventana principal, para eso nos posicionamos sobre el nombre del
proyecto clic derecho y elegimos Nuevo (New) = > Otro (Other)

Miguel Angel Recalde. Pgina 3


Ingeniera del Software II Gua de Programacin

Ahora seleccionamos en Categoras la carpeta Swing GUI Forms y en Tipos de Archivos la opcin
Formulario Jframe, presionamos el botn Siguiente.

Miguel Angel Recalde. Pgina 4


Ingeniera del Software II Gua de Programacin

Ahora asignamos un nombre a nuestra clase y elegimos el botn Terminar.

Vista de la nueva ventana creada.

Miguel Angel Recalde. Pgina 5


Ingeniera del Software II Gua de Programacin

A continuacin en esta ventana vamos a crear los mens y los botones de nuestra aplicacin.

Lo primero que hay que seleccionar para crear un men es elegir en la paleta Mens Swing la opcin
Barra de Men (JMenuBar )

Miguel Angel Recalde. Pgina 6


Ingeniera del Software II Gua de Programacin

Vista del men agregado Vista de aadir un nuevo men.

Ahora vamos a Editar nuestros mens con los siguientes nombres:

Registros
Consultas
Reportes
Utilitarios
Salir

Miguel Angel Recalde. Pgina 7


Ingeniera del Software II Gua de Programacin

Para ello nos posicionamos sobre el men en nuestro caso File y damos clic derecho sobre el men y
elegimos la opcin Editar texto.

Vista de los menus agregados

Ahora vamos a agregar los items de Men, para ello damos clic sobre el Men y elegimos la opcin
Aadir de paleta = > Elemento de men (Jmenu Item).

Miguel Angel Recalde. Pgina 8


Ingeniera del Software II Gua de Programacin

Vita del Jmenu Item agregado

Vista del Jmenu Item agregado en el modulo Inspector.

Miguel Angel Recalde. Pgina 9


Ingeniera del Software II Gua de Programacin

Ahora vamos a editar este men Item y le vamos a poner el nombre de Cliente, esto lo podemos hacer
haciendo doble clic sobre el nombre del JmenuIten o en Propiedades = > text.

Ahora vamos a agregar ms MenuItems a nuestro men:

Ciudades

Barrio

Direccin

Miguel Angel Recalde. Pgina 10


Ingeniera del Software II Gua de Programacin

Funcionarios

Cargo

Proveedores

Stock.

Salir

Ahora podemos ver como quedara nuestro men.

Ahora creamos una carpeta dentro del proyecto donde vamos a guardar todas las imgenes que vamos a
utilizar en nuestro proyecto.

Siguiente paso vamos a personalizar nuestro Men, lo primero que vamos a hacer es cambiar el nombre
de los mens y de los mens Items, para ello damos clic derecho sobre el nombre del men y elegimos la
opcin Cambiar nombre de variable.

Miguel Angel Recalde. Pgina 11


Ingeniera del Software II Gua de Programacin

Cambiamos el nombre por ejemplo menu_registros.

Luego cambiamos los restantes por:

menu_consultas, menu_utilitarios, menu_salir.

Lo mismo hacemos para todos los menuItem

miten_clientes, miten_ciudades, miten_barrios, miten_direccion, miten_cargo,


miten_funcionarios , miten_proveedores, miten_stock, miten_salir

Miguel Angel Recalde. Pgina 12


Ingeniera del Software II Gua de Programacin

Ahora siguiendo con los mens vamos a personalizar los y le agregamos algunos iconos a cada men,
pero antes creamos una carpeta llamada imagen dentro del directorio del proyecto, esta carpeta debe
tener todos los grficos que usaremos en nuestro proyecto.

Ahora seleccionamos el men y nos vamos a las propiedades del men.

Miguel Angel Recalde. Pgina 13


Ingeniera del Software II Gua de Programacin

Seleccionamos la opcin Icon, esto nos lleva a la ventana de miten_clientes, seleccionamos el radio
botn Imagen externa y luego seleccionamos el archivo guardado en la carpeta imagen, en nuestro caso
el archivo clientes.png

De esa manera podemos observar el icono que agregamos.

Miguel Angel Recalde. Pgina 14


Ingeniera del Software II Gua de Programacin

Ahora vamos a agregarle a nuestro sistema unos accesos directos para acceder a los mens ms
rpidamente, para ello seleccionamos el men correspondiente y nos vamos a sus propiedades y en la
propiedad mnemonic ponemos los atajos correspondientes, para Registros por ejemplo podramos usar
R.

Miguel Angel Recalde. Pgina 15


Ingeniera del Software II Gua de Programacin

Y as cambiamos los dems mens, n para consultas, r para Repostes, U para utilitarios y S para salir.

Hacemos una pre visualizacin de la ventana y presionando la tecla Alt se pueden observar los atajos.

Ahora repetimos los mismos pasos pero esta vez con los mens Items, por ejemplo C para clientes, en
Ciudades i, en Barrio B, en Direccin D, en Cargo o, en Funcionarios F, en Proveedores P, en Stock k y en
Salir s.

Otra forma de crear accedo directo a los Items de Men es utilizando Atajos, para poder conseguir esto
tenemos que utilizar la opcin accelerator que se encuentra en la ventana de Propiedades.

Miguel Angel Recalde. Pgina 16


Ingeniera del Software II Gua de Programacin

Vamos a agregar un Atajo por ejemplo Ctrl+D.

Ahora damos clic en el Botn Aceptar.

Luego ejecutamos muestra venta para observar los cambios.

Miguel Angel Recalde. Pgina 17


Ingeniera del Software II Gua de Programacin

Tambin puedo eliminar un menuItem, en nuestro ejemplo eliminaremos el menuItem Stock, para ello
nos posicionamos sobre l y elegimos la opcin Suprimir.

Miguel Angel Recalde. Pgina 18


Ingeniera del Software II Gua de Programacin

Tambin puedo agregar un men dentro del men Registro, para ello me posiciono sobre el men
Registro, clic derecho sobre ella y elijo la opcin Aadir de paleta => Men.

Vista del nuevo men insertado.

Ahora vamos a cambiarle el nombre nuevamente y lo llamaremos Stock, tambin cambiamos el nombre
de la variable por menu_stock, ahora visualizamos los cambios.

Miguel Angel Recalde. Pgina 19


Ingeniera del Software II Gua de Programacin

Ahora agregamos dentro de este men Stock otros menuItems, y eso lo conseguimos de la misma
manera que vimos en la parte de Mens. Estos serian los pasos a seguir:

Nos posicionamos sobre el Men Stock, clic derecho y elegimos la opcin Aadir de paleta = > Elemento
de Men.

Miguel Angel Recalde. Pgina 20


Ingeniera del Software II Gua de Programacin

Editamos su nombre por Implantacin, tambin le agregamos todos los atajos vistos anteriormente.

Luego agregamos dos elementos de men, Entrada de Stock y Salida.

Miguel Angel Recalde. Pgina 21


Ingeniera del Software II Gua de Programacin

Ahora vamos a ordenar nuestro men, aremos que el Men salir quede como la ltima opcin, para ello
nos posicionamos sobre el men Salir, clic derecho y elegimos la opcin Desplazar hacia abajo, si
queremos conseguir que suba asa arriba deberamos elegir la opcin Desplazar hacia arriba.

Ahora vamos a insertar separadores dentro de nuestro men, para ello nos vamos en el bloque
Inspector, nos posicionamos sobre el men Registros, clic derecho sobre el men y elegimos la opcin
Aadir de paleta = > Separador.

Miguel Angel Recalde. Pgina 22


Ingeniera del Software II Gua de Programacin

De esa manera conseguimos insertar un separador dentro del men.

Ahora veamos como se ve el separador dentro del Inspector.

Miguel Angel Recalde. Pgina 23


Ingeniera del Software II Gua de Programacin

Ahora movemos de lugar porque nos coloco el separador en la ltima parte debajo de Salir y yo lo quiero
colocar encima por ejemplo, para ello nos posicionamos sobre el separador, damos clic derecho y
elegimos la opcin Desplazar hacia arriba.

Miguel Angel Recalde. Pgina 24


Ingeniera del Software II Gua de Programacin

Vista del nuevo separador desplazado.

Ahora colocamos tres separadores ms para agrupar de cierta manera nuestros Mens.

Ahora vamos a personalizar un poco nuestra ventana principal, para ello nos vamos en la Paleta, en
Conectores Swing elegimos la opcin Panel, que luego lo arrastramos sobre nuestra ventana, luego en
sus propiedades cambiamos el color de fondo para poder manejarlo mejor, para ello en Propiedades
cambio el background del Panel.

Miguel Angel Recalde. Pgina 25


Ingeniera del Software II Gua de Programacin

Solo a modo de ejemplo vamos a insertar un Botn que lo llamaremos cliente, para ello nos vamos en
Paleta = > Controles Swing y elegimos la opcin Botn.

Miguel Angel Recalde. Pgina 26


Ingeniera del Software II Gua de Programacin

Editamos el texto del botn y lo llamaremos Cliente, tambin cambiamos el nombre del botn por
btn_cliente.

Ahora para asignar grficos al botn seguimos los mismos pasos que vimos con los Mens, nos vamos en
Propiedades = > Icon y seleccionamos el grafico.

Ahora vamos a agregar una imagen de fondo, esta imagen podra ser la de la empresa a quien le estn
diseando el software del trabajo practico, para ello insertamos de Paleta => Controles Swing una
etiqueta Label, borramos el texto y seguimos los mismos pasos vistos anteriormente para agregar un
grafico.

Miguel Angel Recalde. Pgina 27


Ingeniera del Software II Gua de Programacin

Ahora solo nos queda compilar nuestro proyecto para ver que todo marcha bien, para ello nos
posicionamos sobre el nombre del archivo, clic derecho y elegimos compilar o presionamos F9.

Ahora vamos a cambiar el tamao de la ventana principal, para ello hacemos clic en la ventana y en
Propiedades = > Cdigo cambiamos la opcin Normas sobre el tamao de los formularios en Generar
cdigo para cambiar el tamao.

Con esta opcin nos abre la posibilidad de modificar el tamao, eso lo modificamos en Tamao del
formulario.

Miguel Angel Recalde. Pgina 28


Ingeniera del Software II Gua de Programacin

Ahora vamos a agregarle u titulo a nuestra ventana principal, para ello nos vamos en Propiedades = >
title y ponemos el titulo por ejemplo Prototipo Sistema de Control de Stock .

Ahora podemos visualizar los cambios.

Miguel Angel Recalde. Pgina 29


Ingeniera del Software II Gua de Programacin

Ahora vamos a crear tres paquetes, uno llamado utilitarios, el otro llamado registros y el otro llamado
reportes, y para conseguir eso nos posicionamos sobre el nombre del proyecto, clic derecho y elegimos
la opcin Nuevo = > Paquete Java.

Miguel Angel Recalde. Pgina 30


Ingeniera del Software II Gua de Programacin

Esto nos lleva a la ventana Nuevo paquete Java donde ponemos el nombre del Paquete y elegimos el
botn Terminar.

Vista del nuevo paquete creado

Ahora vamos a trabajar un poco con Orientacin a Objetos y vamos a crear una clase Fecha que lo vamos
a poder utilizar desde cualquier parte del proyecto, con eso nos evitamos la redundancia de cdigo,
entonces antes de crear la nueva clase vamos a agregar a nuestra ventana principal el componente

Miguel Angel Recalde. Pgina 31


Ingeniera del Software II Gua de Programacin

etiqueta (Label), editamos el texto de la etiqueta a Fecha.:,, cambiamos el nombre por lbl_data y es este
componente es el que va a recibir la fecha actual del sistema, tambin crearemos otra etiqueta llamada
hora.

Ahora vamos a crear una nueva clase utilizando el paquete utilitarios, esta clase es la que va a tener toda
la codificacin para manejar las fechas, para crear una nueva clase nos posicionamos sobre el paquete
utilitarios, clic derecho y elegimos la opcin Nuevo = > Otro = > Archivo Java vacio

Miguel Angel Recalde. Pgina 32


Ingeniera del Software II Gua de Programacin

Pulsamos el botn Siguiente .

Pulsamos terminar y nos aparece el editor de NetBeans totalmente vacio.

Miguel Angel Recalde. Pgina 33


Ingeniera del Software II Gua de Programacin

Luego le agregamos los siguientes cdigos a nuestro archivo vacio.

package utilitarios;

import java.util.Date;

import java.text.SimpleDateFormat;

public class data

//creamos 4 variables, tienen que ser pblicas para poder utilizar desde la VP

public String mes, dia, anho, dia_semana, hora;

SimpleDateFormat formatoHora = new SimpleDateFormat("HH:mm:ss");

public void leer_hora()

Date horaActual = new Date();

hora = formatoHora.format(horaActual);

public void el_dato() //metodo para leer el dato

Miguel Angel Recalde. Pgina 34


Ingeniera del Software II Gua de Programacin

Date dato = new Date(); //creamos un objeto de tipo Fecha

// mes = ""+ dato.getMonth();//varia de 0 y el "" convierte a String

dia = ""+ dato.getDate();

anho = ""+ (1900+ dato.getYear());//agrega 112 por ser 2012

// dia_semana = ""+ dato.getDay();//retorna el dia de la semana de 0-6

//voy a dar formato al la fecha

switch(dato.getMonth()) //0 a 11

case 0: mes = "enero"; break;

case 1: mes = "febrero"; break;

case 2: mes = "marzo"; break;

case 3: mes = "abril"; break;

case 4: mes = "mayo"; break;

case 5: mes = "junio"; break;

case 6: mes = "julio"; break;

case 7: mes = "agosto"; break;

case 8: mes = "septiembre"; break;

case 9: mes = "octubre"; break;

case 10: mes = "noviembre"; break;

case 11: mes = "diciembre"; break;

switch(dato.getDay())

case 0: dia_semana = "domingo"; break;

Miguel Angel Recalde. Pgina 35


Ingeniera del Software II Gua de Programacin

case 1: dia_semana = "lunes"; break;

case 2: dia_semana = "martes"; break;

case 3: dia_semana = "mircoles"; break;

case 4: dia_semana = "jueves"; break;

case 5: dia_semana = "viernes"; break;

case 6: dia_semana = "sbado"; break;

Ahora nos vamos a la ventana principal y all instanciamos e inicializamos nuestra clase data, tambin
hacemos que nos muestre la fecha en la etiqueta Fecha.:, tambin hacemos que nos muestre la hora.

Obs: Solo se agregan los cdigos que estn en ROJO, los dems cdigos que podemos observar
corresponde al cdigo generado por el IDE.

import javax.swing.*;

import utilitarios.*;

import registro.*;

public class Ventanaprincipal extends javax.swing.JFrame {

Miguel Angel Recalde. Pgina 36


Ingeniera del Software II Gua de Programacin

/** Creates new form Ventanaprincipal */

data mostrar_datos;

public Ventanaprincipal() {

initComponents();

mostrar_datos = new data();

mostrar_datos.el_dato();//primero tengo que ejecutar este metodo para despus ejecutar el resto

lbl_data.setText("Hoy es "+mostrar_datos.dia_semana+ " "+mostrar_datos.dia+" de


"+mostrar_datos.mes+" del ao "+mostrar_datos.anho);

Como se darn cuenta, la hora aparece pero no lo actualiza, para conseguir que se actualice vamos a
agregar a nuestro proyecto un componente llamado TimerBeans, este componente timer beans que nos
sirve para ejecutar procesos en paralelo.

Primero hay que descargar el componente TimerBeans.jar y guardarlo en la carpeta donde esta nuestro
Java en C:\Archivos de programa\Java\jdk1.6.0_01\jre\lib\ext y pegar all el archivo.

Luego tenemos que instalarlo dentro de la paleta, para ello nos vamos en Herramientas = > Paleta =>
Componente Swing/AWT .

Miguel Angel Recalde. Pgina 37


Ingeniera del Software II Gua de Programacin

Seleccionamos el botn Aadir de archivo JAR

Buscamos el archivo en :\Archivos de programa\Java\jdk1.6.0_01\jre\lib\ext

Miguel Angel Recalde. Pgina 38


Ingeniera del Software II Gua de Programacin

Presionar el botn Siguiente, vemos la ventana de Instalar componentes para paleta, seleccionamos el
componente TimerBean y presionamos el Botn Siguiente.

Esto nos lleva a la ventana donde tenemos que elegir la carpeta donde quedara el componente, lo vamos
a colocar en la categora Beans personalizados y presionamos el botn Terminar.

Miguel Angel Recalde. Pgina 39


Ingeniera del Software II Gua de Programacin

Vista del nuevo componente agregado.

Presionamos el botn Cerrar y vemos como quedo la paleta Beans personalizados.

Miguel Angel Recalde. Pgina 40


Ingeniera del Software II Gua de Programacin

Ahora vamos a hacer que actualice la hora de la ventana principal y para eso vamos a usar el
componente Timer, para ello lo seleccionamos y lo arrastramos para colocarlos encima de la ventana
principal.

Este componente agregado a la ventana principal no es visible sobre ella pero podemos encontrarlo en
Inspector = > Otros componentes.

Miguel Angel Recalde. Pgina 41


Ingeniera del Software II Gua de Programacin

Y para ejecutar el timer cada 1 segundo debemos agregarle cdigo al timer, para ello nos posicionamos
sobre el Timer, clic derecho y elegimos la opcin Eventos = > Timer => onTime.

Ahora agregamos el cdigo correspondiente dentro del mtodo y lo ponemos en dentro del mtodo de
la ventana principal el cdigo timer1.start().

Miguel Angel Recalde. Pgina 42


Ingeniera del Software II Gua de Programacin

El cdigo que aparece abajo es lo que tenemos que colocar dentro del mtodo.

mostrar_datos.leer_hora();

lbl_hora.setText("Hora actual: "+mostrar_datos.hora);

Miguel Angel Recalde. Pgina 43


Ingeniera del Software II Gua de Programacin

Ahora veamos cmo podemos hacer para salir del programa presionando el men Salir, para ellos nos
posicionamos sobre el men, clic derecho y elegimos la opcin Eventos = > Mouse = > mouseClicked.

Miguel Angel Recalde. Pgina 44


Ingeniera del Software II Gua de Programacin

Esto nos lleva al editor donde ponemos el cdigo System.exit(0);, con esto podemos salir del programa,
este mismo cdigo se aplicara en el caso que tuvisemos un Botn Salir.

Ahora siguiendo con nuestros ejemplos vamos a trabajar con la apariencia de nuestro proyecto, con el
Look and Feel de la aplicacin, para ello creamos un metodo lookandfeel y a este mtodo vamos a
agregarle el siguiente cdigo al nuestra ventana principal. Pero primero definimos la variable set_look
tipo String

Luego creamos nuestro mtodo dentro de la Ventanaprincipal llamado lookandfeel()

Miguel Angel Recalde. Pgina 45


Ingeniera del Software II Gua de Programacin

Este es el cdigo del mtodos lookandfeel().

public void lookandfeel()

try

//La variable set look tiene que estar definida arriba como una variable String

UIManager.setLookAndFeel(set_look);

SwingUtilities.updateComponentTreeUI(this);

catch (Exception error)

JOptionPane.showMessageDialog(null, error);

Miguel Angel Recalde. Pgina 46


Ingeniera del Software II Gua de Programacin

Una vez creado el mtodo pasamos al siguiente paso que es agregar los cdigos que faltan dentro de la
Ventana Principal.

Primero declaramos nuestra variable y le asignamos un valor String set_look =


"com.sun.java.swing.plaf.metal.MetalLookAndFeel";

Para poder llamar a esas apariencias, vamos a crear cuatro men tem en el men Utilitarios que
llamaremos Look And Feel Windows, Look And Feel Liquid, Look And Feel Metal y Look And Feel -
Nimbus

Ahora vamos a codificar cada uno de ellos, para eso colocamos el cursor sobre el Men, clic derecho y
elegimos Eventos = > Action => actionPerformed

Miguel Angel Recalde. Pgina 47


Ingeniera del Software II Gua de Programacin

Estos Cdigos que aparecen en ROJO son los que tenemos que usar dentro del actionPerformed de cada
Item de Men.

Windows

Liquid

set_look = "com.birosoft.liquid.LiquidLookAndFeel";

lookandfeel();

Metal

set_look = "javax.swing.plaf.metal.MetalLookAndFeel";

lookandfeel();

Nimbus

set_look = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";

lookandfeel();

Esto nos debera dar un error en dos de nuestras llamadas porque todava no importamos los
componentes liquidlnf.jar y gtkswing.jar, al importarlos no nos debera dar ese error, para salvar este
error nos vamos a biblioteca y all Agregamos el archivo JAR.
Miguel Angel Recalde. Pgina 48
Ingeniera del Software II Gua de Programacin

Primero tenemos que agregar cada uno de los jar gtkswing,liquidlnf, etc. Ahora podemos ver los JAR
agregados a nuestra biblioteca.

Luego ejecutamos nuestra ventana y all deberamos elegir en el men las diferentes opciones.

Miguel Angel Recalde. Pgina 49


Ingeniera del Software II Gua de Programacin

Miguel Angel Recalde. Pgina 50


Ingeniera del Software II Gua de Programacin

Programacin de las ventanas


Vamos a continuar con la programacin de nuestro Sistema de Ventas, para ello vamos a comenzar
creando un paquete al que llamaremos py.com.systven.bean, en ella vamos a guardar todas nuestras
clases beans, como sabemos las clases Beans son clases persistentes o sea que vamos a tener que
guardar los datos manipulados en ella, para crear un nuevo paquete nos posicionamos sobre la opcin
Paquetes de fuentes clic derecho Nuevo => Paquete Java.

Vista de la creacin de nuevo Paquete

Ahora le asignamos su nombre py.com.systven.bean, luego presionamos el botn Terminar.

Vista del Paso 2 de la creacin de Paquete java

Miguel Angel Recalde. Pgina 51


Ingeniera del Software II Gua de Programacin

Lo primero que tenemos que hacer es crear una conexin con nuestra Base de datos, para ello nos
vamos en la pestaa Servicios y en Prestaciones encontramos Bases de datos, la seleccionamos,
hacemos clic derecho y elegimos la opcin Nueva conexin de base de datos.

Vista de la prestacin Nueve conexin de Base de Datos.

Luego en la ventana Nueva Conexin de Base de datos completamos los datos de la conexin, lo primero
que definimos es el Nombre del controlador que para nuestro ejemplo es MySQL, luego el servidor que
es localhost, continuamos con el puerto que para el MySQL es 3306, tambin completamos el nombre
de la Base de Datos, para este ejemplo se llama sistvent, tambin completamos el Nombre de usuario y
la Contrasea que para nuestro ejemplo est vaca (Obs: si definieron un usuario y contrasea diferente
compltenla con esos datos)

Vista de la ventana Nueva conexin de base de Datos.

Miguel Angel Recalde. Pgina 52


Ingeniera del Software II Gua de Programacin

Luego podemos observar que ya aparece en Prestaciones nuestra nueva conexin.

Vista de la nueva conexin creada.

Ahora que ya tenemos nuestra conexin vamos a crear nuestro primer AMB, el que vamos a crear es de
Unidad de Productos, para eso vamos a trabajar con la tabla unidad_prod del lado del servidor.

Y como vamos a hacer eso??


Para ello nos vamos a posicionar sobre nuestro paquete view, damos clic derecho, elegimos la opcin
Nuevo => Otro.

Vista de los pasos a seguir para la creacin de un formula de Ejemplo Maestro/Detalle.

Miguel Angel Recalde. Pgina 53


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva a la ventana Archivo Nuevo en Categoras elegimos Formularios de Interfaz grfica
y en Tipos de Archivos elegimos la opcin Formulario de ejemplo maestro/detalle, hacemos clic en el
botn Siguiente.

Vista del paso 1 para la creacin del formulario.

En el paso 2 tenemos que asignar un nombre a nuestra clase, para nuestro ejemplo lo vamos a llamar
UnidadProductoView, hacemos clic en el botn Siguiente.

Vista del paso 2 para la creacin del nuevo formulario.

Luego en el paso 3 elegimos la conexin que nosotros queremos utilizar, para nuestro ejemplo vamos a
usar la que definimos anteriormente.

Miguel Angel Recalde. Pgina 54


Ingeniera del Software II Gua de Programacin

Vista del paso 3 Tabla maestro.

Tambin en esta ventana tenemos que definir qu tabla vamos a usar que para nuestro ejemplo es
unidad_prod, una vez definida esta tabla podemos observar toda informacin sobre la Tabla maestro, o
sea todos los datos que nos van a mostrar en la parte de arriba, esto ser una grilla, para java esto sera
una JTable. Presionamos el botn Siguiente.

Vista del paso 3 Tabla Maestro.

Miguel Angel Recalde. Pgina 55


Ingeniera del Software II Gua de Programacin

Para este ejemplo nosotros vamos a utilizar en el detalle campos de texto, o sea va a ser la misma tabla
arriba y la mista tabla abajo, solo que en la cabecera vamos a tener los datos en un JTable y en el detalle
campos de texto (TextField).

Luego hacemos clic en el botn Terminar.

Vista del paso 4 Opciones de detalle.

Vamos a esperar un rato para ver como Netbeans va a organizar los datos que est creando.

Vista de la creacin del formulario.

Y ahora?? Bingo ya tenemos nuestra ventana UnidadProductoView creada.

Miguel Angel Recalde. Pgina 56


Ingeniera del Software II Gua de Programacin

Vista de la nueva ventana UnidadProductoView.

Netbeans creo por nosotros un formulario, en la cabecera un JTable donde podemos observar el cdigo
y la descripcin de la unidad.

Vista del JTable creado.

Tambin podemos observar en el detalle dos campos de textos con sus respectivas etiquetas Cod Unidad
y Desc Unidad.

Miguel Angel Recalde. Pgina 57


Ingeniera del Software II Gua de Programacin

Vista de las etiquetas y campos de textos creados.

Ahora veamos cuales son los archivos que nos cre Netbeans?
Este formulario que estamos observando corresponde al archivo UnidadProductoView.java y tambin
nos cre otro archivo llamado UnidadProd.java, vamos a conversar dentro un rato sobre este archivo.

Vista de los archivo UnidadProductoView.java y UnidadProd.java.

Miguel Angel Recalde. Pgina 58


Ingeniera del Software II Gua de Programacin

Tambin nos cre otro paquete llamado META-INF y dentro de ese paquete nos cre el archivo llamado
persistence.xml, vamos a conversar dentro un rato sobre este archivo.

Vista del paquete META-INF junto con el archivo persistence.xml

Ahora si nosotros nos vamos a la pestaa Inspector vamos a poder ver todos los componentes que
contiene nuestra ventana.

Vista de los componentes creado por Netbeans.

Miguel Angel Recalde. Pgina 59


Ingeniera del Software II Gua de Programacin

En el grafico por ejemplo podemos observar como Netbeans nos asign un nombre a nuestro JTextField,
de la misma forma para las etiquetas y botones.

En la opcin Otros componentes podemos observar que Netbeans esta utilizando un EntityManager,
una Query y una List, tambin vamos a conversar un poco mas tarde sobre estos componentes.

Vista de los componentes creados dentro de Otros componentes.

Ahora vamos a abrir nuestra Ventana Principal que lo tenemos en nuestro paquete de vistas (view).

Vista del men Unidad

Miguel Angel Recalde. Pgina 60


Ingeniera del Software II Gua de Programacin

Y aqu en Unidad nosotros vamos a agregar un evento, para ello la seleccionamos, hacemos clic derecho
y elegimos las opciones Eventos => Action => actionPerformed.

Vista del nuevo evento a agregar.

Y es en este punto donde nosotros vamos a agregarle un evento para nuestro men item Unidad.

Vista del mtodo vaco creado.

Nuestro evento tiene que hacer lo siguiente, llamar al main a la ventana UnidadProductoView y pasarle
unos argumentos, entonces nosotros vamos a llamar a nuestro mtodo main directamente aqu.

Miguel Angel Recalde. Pgina 61


Ingeniera del Software II Gua de Programacin

Vista del cdigo agregado dentro del evento

Ahora que es lo que tiene que hacer el mtodo main en nuestro


UnidadProductoView.java??
Para ello nos vamos a UnidadProductoView.java y en la fuente vamos a tener que agregar algunos
cdigos, el mtodo main se encuentra al final.

Vista del mtodo main.

Vemos que esta instanciando a nuestro JFrame, luego esta colocando una instancia de
UnidadProductoView dentro del Frame, si nosotros observamos en el Inspector vemos que
UnidadProductoView es un JPanel, entonces el coloca este JFrame dentro del Frame, luego Netbeans
asigna una operacin de EXIT_ON_CLOSE al frame, esa parte lo vamos a comentar, luego coloca un .pack
y por ultimo lo hace visible.

Ahora nuevamente dentro del actionPerformed vamos a llamar a nuestro main y le vamos a pasar
dentro de ella el ttulo que va a tener nuestra ventana, lo vamos a pasar en el main como un parmetro.

Miguel Angel Recalde. Pgina 62


Ingeniera del Software II Gua de Programacin

Vista de los nuevos cdigos agregados.

Luego nos vamos nuevamente al mtodo main y agregamos una lnea de cdigo mas.

Vista del nuevo cdigo agregado

Esto nos va a dar un pequeo error y vemos que para que esta clase pueda ser acezada de forma interna
frame.setTitle(args[0]);

Vista del tipo de error a corregir.

Miguel Angel Recalde. Pgina 63


Ingeniera del Software II Gua de Programacin

Entonces ese parmetro tiene que ser de tipo final, lo cambiamos y ahora vemos que ya no nos ese
inconveniente.

Vista del error corregido

Ahora vamos a cambiar de lugar el archivo UnidadProd.java, para ello seleccionamos el archivo
UnidadProd.java, lo arrastramos y soltamos sobre el paquete py.com.systvent.bean.

Vista del archivo a ser cambiado.

Miguel Angel Recalde. Pgina 64


Ingeniera del Software II Gua de Programacin

Esta accin hace que aparezca la ventana Mover clase, luego simplemente elegimos la opcin
Reestructurar para que Netbeans haga los imports necesarios y sobrescriba los cdigos.

Vista de la ventana Mover clase.

Luego Netbeans se toma unos segundos para terminar con la reestructuracin.

Vista de la venta Mover clase en el momento de la reestructuracin.

Ahora podemos observar dentro de nuestro paquete py.com.systvent.bean el archivo UnidadProd.java


reestructurado.

Miguel Angel Recalde. Pgina 65


Ingeniera del Software II Gua de Programacin

Vista de archivo dentro del paquete py.com.systvent.bean

Una vez que ya cambiamos de lugar nuestro archivo lo vamos a ejecutar nuestra Ventana Principal para
ver cmo est quedando, para ello nos posicionamos sobre ella, hacemos clic derecho y elegimos la
opcin Ejecutar archivo.

Vista de la accin Ejecutar archivo.

Miguel Angel Recalde. Pgina 66


Ingeniera del Software II Gua de Programacin

Vista de la ventana de Sistemas Ventas

Luego nos vamos al men Unidad para llamar a la ventana Registro de Unidad.

Vista del men Unidad.

Ahora ya tenemos lista nuestra ventana Registro de Unidad de Producto.

Miguel Angel Recalde. Pgina 67


Ingeniera del Software II Gua de Programacin

Vista de la ventana Unidad de Producto.

Ahora vamos a agregar un nuevo registro para ello hacemos clic en el botn New.

Vista del nuevo campo disponible.

Con esta accin tenemos los campos de textos disponibles, ac tenemos que tener cuidado por el cdigo
de la unidad porque esta en Autoincremento, eso lo podemos ver si miramos la estructura de nuestra
tabla en la Base de Datos.

Miguel Angel Recalde. Pgina 68


Ingeniera del Software II Gua de Programacin

Vista del valor Autoincremento del lado de la Base de Datos.

Entonces por el momento lo vamos a dejar en blanco el Cdigo y completamos la Descripcin de la


unidad, para la descripcin vamos a colocar Lts (Litros).

Vista de la nueva descripcin agregada.

Observemos que al escribir en el campo de texto ya aparece en la lista de la cabecera, luego hacemos clic
en el botn Save, ahora nos vamos a la Base de Batos para ver si realmente guardo nuestro registro.

Miguel Angel Recalde. Pgina 69


Ingeniera del Software II Gua de Programacin

Vista del nuevo registro agregado.

Vemos que nuestros datos fueron persistidos dentro de la Base de datos.

Tambin podemos observar estos datos desde Netbeans para ello nos vamos a Prestaciones, elegimos el
nombre de la base de datos que para nuestro ejemplo es sistvent, luego el nombre de nuestra tabla
unidad_prod, hacemos clic derecho sobre ella y elegimos la opcin Mostrar datos.

Vista de las tablas desde Netbeans.

Miguel Angel Recalde. Pgina 70


Ingeniera del Software II Gua de Programacin

Vista del nuevo registro agregado desde Netbeans.

Ahora vamos a tratar de seguir la lgica que Netbeans utilizo para generar todos estos cdigos.

En primer lugar Java tiene una API llamada Java Persistence API que es conocido como JPA, Netbeans
utiliza esta API conjuntamente con un Framework SWING para que los datos guardados dentro de la
Base de Datos estn sincronizados o mapeados con los elementos de SWING y que elementos son
esos??

Vista de las Propiedades de SWING

Miguel Angel Recalde. Pgina 71


Ingeniera del Software II Gua de Programacin

Son todos los elementos que observamos dentro de la paleta de Propiedades.

Pero como es que Netbeans hace eso??


Esta ventana UnidadProductoView tiene una JTable, los JTextField y los botones.

Veamos las Propiedades de cada uno de ellos.

Vista de las propiedades de JTAble.

Si nosotros nos vamos en la pestaa Enlace tambin conocido como Binding, observamos que nuestra
JTable esta vinculada a una lista (list).

Vista de la pestaa Enlace.

Miguel Angel Recalde. Pgina 72


Ingeniera del Software II Gua de Programacin

En la pestaa Eventos ella no aparece ningn evento por el momento.

Vista de la pestaa Eventos.

Y en la pestaa Cdigo el nombre de la variable es masterTable y no se observa ninguna generacin de


cdigo importante aqu, la parte interesante es que nuestra JTable esta vinculada con una lista (list).

Vista de la pestaa cdigo.

Ahora si hacemos clic en nuestro JTextfield en sus Propiedades vamos a poder observar que tiene un
enlace a un Elemento de masterTable, ese elemento es nuestro JTable de la cabecera, tambin
podemos observar que tiene una opcin enabled, esto nos indica que esta habilitada cuando un
elemento del JTable de la cabecera es seleccionado.

Miguel Angel Recalde. Pgina 73


Ingeniera del Software II Gua de Programacin

Vista de la pestaa Enlace

En la pestaa Eventos no se observan eventos importantes.

Vista de la pestaa Eventos.

En la pestaa Cdigo tampoco vemos que tenga un cdigo importante generado, podemos observar que
tiene una Serializacion para pasar los datos a la Base de Datos, el Nombre de la variable y el tipo de
Modificador de la variable es privada.

Miguel Angel Recalde. Pgina 74


Ingeniera del Software II Gua de Programacin

Vista de la pestaa Cdigo.

Ahora miremos que tenemos en las Propiedades de nuestros botones, comenzamos con el botn New.

En la pestaa Eventos podemos observar que tenemos un evento del tipo actionPerformed.

Vista de la pestaa Eventos.

En la pestaa Enlace observamos que no tiene enlace por el momento.

Miguel Angel Recalde. Pgina 75


Ingeniera del Software II Gua de Programacin

Vista de la pestaa Enlace.

En Propiedades observamos que son las propiedades comunes a un botn.

Vista de la pestaa Propiedades.

En la pestaa Cdigo observamos el Nombre de la variable, el tipo de Modificador de variable, el


Cdigo generado, etc.

Miguel Angel Recalde. Pgina 76


Ingeniera del Software II Gua de Programacin

Vista de la pestaa Cdigo.

Ahora pasamos al botn Delete en la pestaa enlace observamos que tiene un enabled, que pone
disponible la fila seleccionada en el JTable.

Vista de la propiedad Enlace del botn Delete

Tambin podemos observar que tiene un evento asociado a ella llamado deleteButtonActionPerformed.

Vista de la propiedad Eventos del botn Delete.

Miguel Angel Recalde. Pgina 77


Ingeniera del Software II Gua de Programacin

En la pestaa Cdigo tiene los mismos valores que el observado en el botn New.

Vista de las propiedades de la pestaa Cdigo del botn Delete.

Los mismos valores podemos observar para los botones Refrech y Save, ambos tienen eventos.

Ahora cmo es que los datos aparecen aqu en la cabecera del JTable y en los TextField??

En primer lugar si nosotros nos vamos en la pestaa Inspector podemos observar los tres componentes
que contiene la opcin Otros Componentes.

Vista de los componentes desde el Inspector.

Tambin esos mismos componentes aparecen aqu en nuestra paleta de Propiedades, en el enlace
Persistencia de Java (JavaPersistence), all nosotros tenemos un Administrador de entidades, tambin
tenemos una Consulta y tambin tenemos un Resultado de una consulta.

Miguel Angel Recalde. Pgina 78


Ingeniera del Software II Gua de Programacin

Vista de los componentes desde la paleta.

Veamos que son cada uno de estos componentes.

El Administrador de entidades es nuestra entityManager y que es lo que hace??

Vista del componente entityManager.

Nuestra entityManager ella va a estar enlazado a una Unidad de Persistencia, en este caso est siendo
llamada sistventPU (PU PersistenceUnit).

Vista de las propiedades del entityManager.

Miguel Angel Recalde. Pgina 79


Ingeniera del Software II Gua de Programacin

Pero donde esta esa unidad de Persistencia que vemos all??

Esa Unidad de persistencia la vamos a encontrar dentro del paquete META_INF y dentro de ella el
archivo persistence .xml.

Vista del archivo persistence.xml dentro del paquete META-INF.

Veamos ahora sus Propiedades, observamos que tiene como nombre persistence y que su extensin es
xml.

Vista de las propiedades del archivo persistence.xml

Miguel Angel Recalde. Pgina 80


Ingeniera del Software II Gua de Programacin

Le damos doble clic y nos lleva directo a la ventana de Diseo.

Vista Diseo del archivo persistence.xml.

Al elegir la pestaa Operador XML nos lleva directamente a la fuente, aqu podemos observar que la
unidad de persistencia (persistence-unit) es sistventPU, entonces lo que tenemos aqu es un archivo de
persistencia que controla esa persistencia con la Base de Datos o sea es nuestro archivo de
mapeamiento, el tipo de transaccin es local, Netbeans esta usando como proveedor de persistencia
toplink, eso es lo que nos muestra nuestro provider que va a implementar JPA, aqu estamos teniendo
una visin general, el otro proveedor que utiliza JPA que ya vimos en la clase pasada es Hibernate,
existen otros pero en este caso nosotros estamos utilizando toplink de Oracle.

Vista Operador xml del archivo persistence.xml.

Vemos tambin que el crea una clase de persistencia que es la clase UnidadProd, al rato vamos a abrir
esa clase y veremos que tiene dentro de ella, luego tenemos las propiedades de conexin que son el
usuario, la contrasea, la url y el driver que estamos utilizando, para nuestro ejemplo es mysql.

Miguel Angel Recalde. Pgina 81


Ingeniera del Software II Gua de Programacin

Vista de las propiedades del archivo persistence.xml.

Bien vimos que tiene ese archivo persistence-unit explorando el cdigo xml.

Ahora enlazado a esa entityManager nosotros tenemos una Query, tambin ahora ya sabemos que esa
entityManager esta enlazado directamente a nuestra Entity o Entidad.

Esa entidad es un EnterpriceJavaBeans o sea nuestro archivo UnidadProd.java que es una JB


(JavaBeans).

Vista del archivo UnidadProd.java

Miguel Angel Recalde. Pgina 82


Ingeniera del Software II Gua de Programacin

Ahora veamos que contiene nuestro JavaBeans.

Podemos observar que es un bens normal pero con algunas anotaciones muy interesantes como
@Entity, @Table, @NamedQueries, etc.

Vista de las anotaciones que contiene el archivo UnidadProd.java

La anotation @Entity nos esta informando que los que tenemos aqu es una entidad que esta vinculada a
una Base de Datos.

El anotation @Table nos indica el nombre de la tabla y el esquema que tiene que utilizar, en este caso
nosotros no definimos ningn esquema para nuestra Base de Datos.

Tambin tenemos un anotations @NamedQueries que lo que hace es traernos una serie de consultas,
podemos observar en el select que no esta utilizando el SQL normal que solemos usar sino que esta
usando un SQL propio del JPA y lo que esta haciendo all es una consulta para cada campo de la tabla
unidad_prod.

Miguel Angel Recalde. Pgina 83


Ingeniera del Software II Gua de Programacin

Vista de la consultas dentro de los @NamedQuery.

Despus vemos que comienza all con la definicin de la clase UnidadProd que implementa Serializable.

Tambin observamos la anotacin @Id que nos indica que es la clave primaria, en este caso la clave
primaria es CodUnidad, este el nombre que le asigna Java y del lado de la base de datos observamos que
el nombre del campo es cod_unidad.

Tambin observamos que Netbeans declara aqu todos los atributos de forma privada respetando as el
principio de encapsulamiento y despus observamos que Netbeans fue declarando los mtodos gets y
los sets, todos ellos con visibilidad pblica.

Vista de los atributos y mtodos creados.

Entonces despus de esto nosotros sabemos que tenemos una query y que esa query en sus
propiedades ella tiene una consulta SELECT u FROM UnidadProd u, tambin observamos que est
vinculada a nuestro entityManager que est apuntando directamente a nuestro Bean y que este Bean
esta a la vez vinculado o mapeado con una tabla del lado de la Base de Datos.

Miguel Angel Recalde. Pgina 84


Ingeniera del Software II Gua de Programacin

Vista de las propiedades del componente query.

En la pestaa Eventos no observamos nada interesante y en el de Cdigo tampoco, por lo tanto nuestra
query va a estar ejecutando una consulta travs de aquel bean solo que esa consulta no puede venir
directamente para nuestra Cabecera JTable ni para nuestro detalle JTextField y entonces que es lo que
sucede ac??

Esta consulta ella genera directamente una lista y dicha lista es observada dentro del Query.

Vista del componente List dentro del Inspector.

Veamos las Propiedades que contiene nuestra lista:


En la pestaa Cdigo podemos observar que ella crea aqu una lista.
Miguel Angel Recalde. Pgina 85
Ingeniera del Software II Gua de Programacin

Vista de las Propiedades del componente list.

Y esta lista es la que va a estar vinculada a nuestro query, tambin esa lista va a estar marcada como
Observable o sea nuestra lista ser observable, eso significa que todos los cambios que realicemos en
nuestra query va a tener influencia en la lista, entonces si hacemos cambios del lado de la Base de Datos
esos cambios van a ser visible en nuestro JTable, porque??

Porque si nos fijamos en las propiedades de nuestro JTable ella esta vinculada a nuestra lista

Vista de la ventana masterTable Pestaa Enlace.

Resumiendo ahora ya sabemos que necesitamos de un Bean marcado con la anotacin @Entity y ese
bean va a estar mapeado a una de mis tablas del lado de la BD y todo este cdigo Netbeans nos genero,
luego observamos que necesitamos de los tres componentes vistos anteriormente para poder persistir
los datos, nuestro entityManager va a estar enlazado a una Unidad de persistencia que es un archivo

Miguel Angel Recalde. Pgina 86


Ingeniera del Software II Gua de Programacin

xml, despus nos creo nuestro Formulario grafico con todas las vinculaciones vistas anteriormente,
siendo que entityManager apunta a una query que a la vez apunta a una consulta y la lista que apunta
para el query, la JTable apunta a esa lista y los JTextField apuntan a una de las columnas de nuestro
JTable.

Ahora continuando con el diseo de nuestra ventana nosotros no queremos que aparezca ese cdigo all
ya que es generado, entonces vamos a sacar eso de ah siguiendo los siguientes pasos:

Seleccionamos nuestra JTable, hacemos clic derecho y elegimos las opciones Enlazar => elements.

Vista de los pasos a seguir

Esto nos lleva a la ventana Enlace masterTable.elements donde pasamos la opcin codUnidad del lado
de Disponible, luego hacemos clic en el botn Aceptar.

Vista de la ventana Enlace masterTable.elements.

Miguel Angel Recalde. Pgina 87


Ingeniera del Software II Gua de Programacin

Ahora nos vamos en nuestra ventana UnidadProductoView y all eliminamos la etiqueta Cod Unidad y el
campo de texto que corresponde al Cdigo de Unidad.

Vista de la etiqueta y campo de texto a eliminar.

Ahora podemos observar los cambios realizados a nuestra ventana.

Vista de la Ventana UnidadProductoView.

Como podemos realizar de forma manual nuestro AMB sin usar la


opcin Formulario de Ejemplo Maestro / Detalle??
Ahora vamos a ver cmo podemos hacer nuestro registro de una forma manual, entonces no vamos a
usar esa opcin formulario Maestro / Detalle, entonces lo primero que vamos a hacer es crear nuestro

Miguel Angel Recalde. Pgina 88


Ingeniera del Software II Gua de Programacin

archivo bean, para nuestro ejemplo vamos a tomar la tabla departamento, para ello seguimos los
siguientes pasos:

Nos posicionamos sobre el paquete py.com.systvent.bean, hacemos clic derecho Nuevo => Otro.

Vista de los pasos a seguir para crear un archivo bean.

Esta accin nos lleva a la ventana Archivo donde en Categoras elegimos Persistence y en Tipo de
Archivos elegimos la opcin Clases entidad a partir de bases de datos.

Vista Paso 1 para la creacin de una Clase entidad a partir de bases de datos.

Hacemos clic en el botn Siguiente, esta accin nos lleva a la ventana Nuevo Clases entidad a partir de
bases de datos, donde tenemos que elegir en Tablas disponibles la tabla a partir de la cual vamos a
generar nuestro archivo, para nuestro ejemplo elegimos departamento, luego hacemos clic en el botn
Agregar.

Miguel Angel Recalde. Pgina 89


Ingeniera del Software II Gua de Programacin

Vista paso 2 Tablas de bases de datos.

Ahora podemos observar que departamentos ya se encuentra del lado de Tablas seleccionadas,
pulsamos el botn Siguiente.

Vista del paso 2 de la creacion de una Nueva Clase entidad a partir de una base de datos.

En el paso 3 podemos observar que Netbeans va a generar el nombre de la clase aqu que ser
Departamento y tambin que nos va a generar las anotaciones para los campos persistentes, ahora
hacemos clic en el botn Siguiente.

Miguel Angel Recalde. Pgina 90


Ingeniera del Software II Gua de Programacin

Vista del paso 3 Clases entidad

Esta accin nos lleva al paso 4 donde aparecen las diferentes Opciones de mapeo que podemos elegir,
finalmente hacemos clic en el botn Terminar.

Vista del paso 4 Opciones de mapeo.

Ahora podemos observar nuestra clase entidad creada con todas las anotaciones y mtodos que vamos a
necesitar.

Miguel Angel Recalde. Pgina 91


Ingeniera del Software II Gua de Programacin

Vista del cdigo generado del archivo Departamento.java

Muy bien ahora que creamos nuestra clase bean pero nos falta crear nuestra clase visual, entonces
vamos a continuar con eso, como ya se comento anteriormente el tipo de formulario que estamos
utilizando es JFrame, entonces vamos a crear uno ahora para ello seguimos los siguientes pasos:

Nos posicionamos sobre nuestro paquete py.com.systvent.view, hacemos clic derecho sobre ella y
elegimos las opciones Nuevo => Formulario JFrame.

Vista de los pasos a seguir para la creacin de un formulario Jframe.

Miguel Angel Recalde. Pgina 92


Ingeniera del Software II Gua de Programacin

Vamos a darle un nombre a nuestro formulario, en nuestro ejemplo lo vamos a llamar


DepartamentoView, luego le damos clic en Terminar.

Vista del paso 2 Nombre y ubicacin.

Ahora ya podemos observar nuestro nuevo formulario JFrame creado.

Vista del nuevo formulario creado.

Ahora vamos a comenzar insertando una Lista dentro de nuestro formulario, para ello nos vamos a
nuestra Paleta y en Contenedores Swing elegimos Tabla.

Miguel Angel Recalde. Pgina 93


Ingeniera del Software II Gua de Programacin

Vista del componente Tabla dentro de la Paleta.

Lo nico que tenemos que hacer ac es seleccionar la tabla y colocarlo sobre nuestro formulario.

Vista de la nueva tabla agregada.

Luego vamos a tener que agregar a nuestra ventana una etiqueta, un campo de texto y 4 botones.

Miguel Angel Recalde. Pgina 94


Ingeniera del Software II Gua de Programacin

Vista de los componentes agregados

Ahora lo que vamos a hacer es cambiar los nombres a los botones, asignar los nombres a las variables de
los botones por ejemplo btn_Nuevo, btn_Eliminar, etc.

Vista de los cambios a los nombre de botones

Ahora nos falta adicionar nuestra Persistencia de Java entonces vamos a comenzar agregando nuestro
Administrador de entidades que ser nuestro entityManager, la seleccionamos y luego la soltamos
sobre nuestra ventana DepartamentoView.java.

Miguel Angel Recalde. Pgina 95


Ingeniera del Software II Gua de Programacin

Vista del componente Administrador de entidades agregado.

En el siguiente paso agregamos nuestra Consulta, para ello la seleccionamos y luego la soltamos sobre
nuestra ventana DepartamentoView.java.

Vista del componente Consulta agregado.

Por ltimo agregamos nuestro Resultado de la consulta, para ello seguimos los mismos pasos vistos
anteriormente, la seleccionamos para despus soltarla sobre la ventana DepartamentoView.java.

Miguel Angel Recalde. Pgina 96


Ingeniera del Software II Gua de Programacin

Vista del componente Resultado de la consulta agregado

Ahora veamos en el Inspector los componentes que agregamos a nuestro formulario.

Vista de los componentes agregados.

Ahora vamos a comenzar a configurar los componentes agregados, primero vamos a configurar nuestro
entityManager y esa configuracin lo vamos a hacer en sus Propiedades.

En la ventana de Propiedades podemos observar que ella esta apuntando a sistventPU y el tipo de
flushMode esta en Predeterminado.
Miguel Angel Recalde. Pgina 97
Ingeniera del Software II Gua de Programacin

Vista de las propiedades del entityManager.

En las pestaas Enlace y Eventos no tiene nada y Cdigo cambiamos el nombre a entityManager.

Vista de las Propiedades de la pestaa Cdigo del entityManager.

Ahora vamos a configurar nuestra Query, para ello nos vamos en sus Propiedades, agregamos una
consulta SELECT d FROM Departamento d, notemos que en este punto agregamos el nombre de nuestro
Bean y no el nombre de la tabla que est del lado de la Base de Datos, nos aseguramos que la opcin
entityManager apunte al entityManager que agregamos anteriormente.

Miguel Angel Recalde. Pgina 98


Ingeniera del Software II Gua de Programacin

Vista de las Propiedades del componente query.

En la pestaa Cdigo cambiamos el nombre de la variable por query.

Vista de las Propiedades de del query en la pestaa Cdigo.

Ahora vamos a configurar nuestra lista y para ello seguimos los mismos pasos vistos anteriormente, en la
pestaa Propiedades hacemos que apunte a query y marcamos para que sea observable.

Miguel Angel Recalde. Pgina 99


Ingeniera del Software II Gua de Programacin

Vista de la ventana list1 Propierties.

En Eventos no tenemos nada y en la pestaa Cdigo cambiamos el Nombre de la variable a list, pero
tambin ac en Parmetro de tipo tenemos que agregar el Bean con el cual vamos a estar trabajando,
que en este caso es <py.com.systven.bean.Departamento>.

Vista de las Propiedades de la pestaa Cdigo.

Muy bien entonces de esta manera ya configuramos nuestros componentes de persistencia, ahora
vamos a seguir configurando los otros Componentes Visuales.

Miguel Angel Recalde. Pgina 100


Ingeniera del Software II Gua de Programacin

Vamos a comenzar con nuestra tabla, la seleccionamos y luego hacemos los cambios en sus propiedades,
el primer cambio que vamos a hacer es agregarle un enlace a nuestra lista, para ello en la pestaa Enlace
en la opcin elements hay que indicarle donde se encuentra nuestra lista para ello hacemos clic en el
selector.

Vista de la propiedad elements de la pestaa Enlace.

Esto nos lleva a la ventana de Enlace donde tenemos que Enlazar la fuente y la expresin.

Vista de la ventana Enlace.

Luego desplegamos las opciones de Enlazado de fuente y elegimos la opcin list, ahora hacemos clic en
el botn Aceptar.

Miguel Angel Recalde. Pgina 101


Ingeniera del Software II Gua de Programacin

Vista de la opcin List dentro de la ventana Enlace.

Luego en Seleccionado aparecen los dos atributos pero para nuestro ejemplo solo necesitamos el
atributo nombreDepartamento.

Vista de los campos seleccionados.

Entonces vamos a pasar el atributo codDepartamento del lado de Disponible, luego hacemos clic en el
botn Aceptar.

Miguel Angel Recalde. Pgina 102


Ingeniera del Software II Gua de Programacin

Vista de los elementos Disponible y Seleccionado.

Ahora podemos observar nuestra ventana con tabla enlazada a nuestra lista de Departamentos.

Vista de los cambios ocurridos en la ventana DepartamentoView.

Ahora el otro cambio que tenemos que hacer es en la pestaa Cdigo, en Nombre de la variable vamos a
cambiar el nombre Jtable1 por masterTable.

Miguel Angel Recalde. Pgina 103


Ingeniera del Software II Gua de Programacin

Vista del Nombre de variable Table1

Vista del cambio de Nombre de variable a masterTable.

Ahora vamos a pasar a configurar las propiedades de nuestro JTextField, entonces seleccionamos
nuestro JTextField le damos clic derecho Enlazar => text.

Miguel Angel Recalde. Pgina 104


Ingeniera del Software II Gua de Programacin

Vista del JTextField a enlazar.

Nosotros sabemos que nuestro JTextField tiene que estar vinculado a nuestro masterTable y el Enlazado
de expresin en ${selectedElement.nombreDepartamento}

Vista de la ventana Enlace JTextField.

En la pestaa Avanzado marcamos la opcin Valor de fuente ilegible y dejamos las opciones por
defecto, luego elegimos el botn Aceptar.

Miguel Angel Recalde. Pgina 105


Ingeniera del Software II Gua de Programacin

Vista de la pestaa Avanzado de la ventana JTextField1.

Ahora el otro cambio que tenemos que en las Propiedades dentro de la pestaa Enlace, en enabled
tenemos que agregar algunas opciones.

Vista de la pestaa Enlace

Miguel Angel Recalde. Pgina 106


Ingeniera del Software II Gua de Programacin

En la pestaa Enlace la opcin Enlazado de fuente tiene que apuntar a nuestra masterTable y Enlazado
de expresin a ${selectedElement != null}, o sea cuando el elemento seleccionado sea distinto de nulo,
en la pestaa avanzado no tocamos nada y por ultimo hacemos clic en el botn Aceptar.

Vista de la ventana Enlace.

Ahora siguiendo con la configuracin en la pestaa Cdigo cambiamos el Nombre de la variable por
nombreDepartamentoField.

Vista de las Propiedades de la pestaa Cdigo.

Muy bien con esto terminamos la configuracin de estos componentes visuales ahora vamos a
configurar cada uno nuestros botones.

Miguel Angel Recalde. Pgina 107


Ingeniera del Software II Gua de Programacin

Vista de la ventana DepartamentoView.

Lo primero que vamos a hacer es modificar las Propiedades de nuestro botn Eliminar, para ello
nuevamente nos vamos en sus Propiedades y en la pestaa Enlace escribimos el siguiente cdigo en la
opcin enabled masterTable[${selectedElement != null}].

Vista del cdigo agregado en la propiedad enabled de la pestaa Eventos.

Luego vamos a agregarle a cada uno de nuestros botones los eventos correspondientes, comencemos
con el botn Nuevo, para ello seguimos los siguientes pasos:
Miguel Angel Recalde. Pgina 108
Ingeniera del Software II Gua de Programacin

Nos posicionamos sobre nuestro botn Nuevo, hacemos clic derecho Eventos => Action =>
actionPerformed.

Vista de los pasos a seguir para agregar un nuevo evento.

Ahora podemos observar la vista del evento actionPerformed del botn Nuevo.

Vista del evento actionPerformed agregado.

A este evento le tenemos que agregarle los siguientes cdigos:

Miguel Angel Recalde. Pgina 109


Ingeniera del Software II Gua de Programacin
py.com.systven.bean.Departamento d = new py.com.systven.bean.Departamento();

entityManager.persist(d);

list.add(d);

int row = list.size()-1;

masterTable.setRowSelectionInterval(row, row);

masterTable.scrollRectToVisible(masterTable.getCellRect(row, 0, true));

Vista del cdigo agregado.

Ahora vamos a continuar con el cdigo del botn Eliminar, para ello seguimos los mismos pasos vistos
anteriormente, nos posicionamos sobre nuestro botn Eliminar, hacemos clic derecho y elegimos las
opciones Eventos => Action => actionPerformed.

Vista de los pasos a seguir para agregar un nuevo evento.

Miguel Angel Recalde. Pgina 110


Ingeniera del Software II Gua de Programacin

Ahora podemos observar la estructura del nuevo evento agregado.

Vista del nuevo evento agregado

Ahora le agregamos los siguientes cdigos a nuestro evento

int[] selected = masterTable.getSelectedRows();

List<py.com.systven.bean.Departamento> toRemove = new ArrayList<py.com.systven.bean.Departamento>(selected.length);

for (int idx=0; idx<selected.length; idx++) {

py.com.systven.bean.Departamento d = list.get(masterTable.convertRowIndexToModel(selected[idx]));

toRemove.add(d);

entityManager.remove(d);

list.removeAll(toRemove);

Vista los cdigos agregados dentro del evento.

Como vemos nos da un error, eso es porque no importamos las bibliotecas que permiten manipular
nuestro ArrayList y nuestro List, para corregir eso hacemos clic derecho sobre nuestro editor y elegimos
la opcin Reparar importaciones.

Miguel Angel Recalde. Pgina 111


Ingeniera del Software II Gua de Programacin

Vista de la opcin Reparar importaciones.

En la ventana Reparar todos los imports podemos observar las importaciones que nos faltan y hacemos
clic en el botn OK.

Vista de la ventana Repara todos los imports.

Ahora en la fuente podemos observar todos los imports que hizo Netbeans .

Vista de los paquetes importados

Miguel Angel Recalde. Pgina 112


Ingeniera del Software II Gua de Programacin

Vista del cdigo sin el error anterior.

Ahora vemos que ya desaparecieron los errores de importacin

Ahora vamos a agregar los eventos del botn Actualizar, tambin seguimos los mismos pasos vistos
anteriormente.

Vista de los pasos a seguir para crear un nuevo evento.

Vista de la estructura del evento creado.

Miguel Angel Recalde. Pgina 113


Ingeniera del Software II Gua de Programacin

Luego agregamos los siguientes cdigos a nuestro evento.

entityManager.getTransaction().rollback();

entityManager.getTransaction().begin();

java.util.Collection data = query.getResultList();

for (Object entity : data) {

entityManager.refresh(entity);

list.clear();

list.addAll(data);

Vista de los cdigos agregados.

Ahora vamos a programar nuestro botn Guardar siguiendo siempre los mismos pasos vistos
anteriormente con los otros botones.

Vista de los pasos a seguir para agregar un nuevo evento.

Miguel Angel Recalde. Pgina 114


Ingeniera del Software II Gua de Programacin

Vista del nuevo evento agregado al botn Guardar.

Ahora a nuestro evento le agregamos las siguientes lneas de cdigo:

try {

entityManager.getTransaction().commit();

entityManager.getTransaction().begin();

} catch (RollbackException rex) {

rex.printStackTrace();

entityManager.getTransaction().begin();

List<py.com.systven.bean.Departamento> merged = new ArrayList<py.com.systven.bean.Departamento>(list.size());

for (py.com.systven.bean.Departamento d : list) {

merged.add(entityManager.merge(d));

list.clear();

list.addAll(merged);

Vista de los nuevos cdigos agregados.

Miguel Angel Recalde. Pgina 115


Ingeniera del Software II Gua de Programacin

Como podemos observar nos da un pequeo error y es porque nos faltan algunas bibliotecas, entonces
vamos a importarlas, para ello hacemos clic derecho sobre la fuente y elegimos la opcin Reparar
importaciones.

Vista de la opcin Reparar importaciones.

Vista de las bibliotecas importadas.

Muy bien ahora nos falta agregar algunos cdigos en el constructor de nuestra ventana
DepartamentoView.

Vista del mtodo constructor de la ventana DepartamentoView.

Miguel Angel Recalde. Pgina 116


Ingeniera del Software II Gua de Programacin

Ahora le agregamos los siguientes cdigos :

if (!Beans.isDesignTime()) {

entityManager.getTransaction().begin();

Vista de los nuevos cdigos agregados.

Reparamos las importaciones que nos faltan para salvar este error.

Vista de la opcin Reparar importaciones.

Ahora podemos observar las importaciones de las bibliotecas que Netbeans hizo para nosotros.

Vista de las bibliotecas importadas.

Miguel Angel Recalde. Pgina 117


Ingeniera del Software II Gua de Programacin

Muy bien ahora nos vamos a nuestra Ventana Principal y ah vamos a configurar nuestro men
Departamento siguiendo los mismos pasos vistos anteriormente.

Vista de los mens de la Ventana Principal.

Vista de los pasos a seguir para agregar un evento al tem de men Departamento.

Miguel Angel Recalde. Pgina 118


Ingeniera del Software II Gua de Programacin

Ahora agregamos los siguientes cdigos dentro del evento agregado.

String args[] = new String[1];

args[0] = "Registro de Departamento";

DepartamentoView.main(args);

Vista de los cdigos agregados.

Ahora vamos a agregar algunos cdigos al mtodo main de nuestra ventana DepartamentoView, vamos
a agregar los siguientes cdigos, tambin no hay que olvidar que en mtodo main el tipo de parmetro
que le pasamos debe ser final.

DepartamentoView d = new DepartamentoView();

d.setVisible(true);

d.setTitle(args[0]);

Vista de los cdigos agregados dentro del mtodo main.

Bueno ahora solo nos queda probar si est funcionando como queremos, para ello nos vamos a la
Ventana principal y de ah vamos a llamar a nuestra ventana de Departamento.

Miguel Angel Recalde. Pgina 119


Ingeniera del Software II Gua de Programacin

Vista la opcin Ejecutar archivo.

En la Ventana Principal elegimos el tem de men Departamento.

Vista del tem de men Departamento.

Miguel Angel Recalde. Pgina 120


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva a la ventana de Registro de Departamento.

Vista de la ventana Registro de Departamento.

Ahora vamos a presionar el botn Nuevo, luego cargamos los datos

Vista del dato agregado dentro del campo de texto.

Ahora vamos a nuestra Base de Datos para ver si nos guardo nuestro nombre de Departamento

Vista del registro agregado dentro de la Base de Datos.

Miguel Angel Recalde. Pgina 121


Ingeniera del Software II Gua de Programacin

Vemos que nos guardo nuestro nuevo registro con el cdigo autogenerado.

Ahora si observamos nuestro detalle notamos que Ventas no aparece en la cabecera (JTable) le falta
esta funcionalidad, entonces esa parte de la funcionalidad queda como tarea para ustedes, al final
nuestra ventana debera verse de esta manera.

Vista de la ventana Registro de Departamento con todas sus funcionalidades.

Programacion paso a paso de la ventana Cliente

Ahora vamos a continuar con nuestro ABM, el siguiente ejemplo es un poco mas complejo que lo visto
anteriormente, ahora vamos a crear el formulario para Registro de clientes, para ello vamos a seguir los
siguientes pasos:

Nos posicionamos sobre el paquete py.com.systvent.view, hacemos clic derecho sobre ella y elegimos
las opciones Nuevo => Formulario de ejemplo maestro/detalle.

Miguel Angel Recalde. Pgina 122


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para crear un nuevo formulario Ejemplo maestro/detalle.

Esta accin nos lleva al paso 2 de la ventana de Nuevo Formulario maestro/detalle donde tenemos que
agregar el nombre de nuestra ventana, para nuestro ejemplo lo vamos a llamar ClienteView, hacemos
clic en el botn Siguiente..

Vista del paso 2 de la ventana Nuevo Formulario maestro/detalle.

Miguel Angel Recalde. Pgina 123


Ingeniera del Software II Gua de Programacin

Recordemos que es nuestro cdigo del lado de la Base de Datos es autonumerico as que no vamos a
necesitar del cdigo del cliente, entonces en el paso 3 Tabla maestro elegimos la Tabla de la Base de
datos y el campo cod_cli lo pasamos del lado de Columnas disponibles, luego hacemos clic en el botn
Siguiente.

Paso 3 de la ventana Nuevo Formulario maestro/detalle Tabla maestro

En este punto 4 no vamos a usar en el detalle Cuadros de textos sino que vamos a usar otra tabla, por
eso seleccionamos la opcin cliente_direccion, tampoco en este punto queremos que aparezca el cdigo
de la direccin ya que es autonumerico, entonces pasamos el campo cod_direccion del lado de
Columnas disponibles, por ultimo hacemos clic en el botn Terminar.

Vista del paso 4 Opciones de detalle.

Miguel Angel Recalde. Pgina 124


Ingeniera del Software II Gua de Programacin

Esta accin puede durar algunos segundos porque Netbeans nos esta creando todos los cdigos que
vamos a necesitar.

Vista de la creacin del Formulario Maestro/Detalle.

Tambin en nuestro proyecto observemos que Netbeans nos creo dos archivos Beans que son
Cliente.java y ClienteDireccion, vamos a pasar estos archivos al paquete beans, para ello los
seleccionamos y lo arrastramos sobre el nombre del paquete.

Vista de los archivos beans generados.

Miguel Angel Recalde. Pgina 125


Ingeniera del Software II Gua de Programacin

Esta accin hace que aparezca la ventana Mover Clases, hacemos clic en el botn Reestructurar para
que Netbeans nos reestructure todos los cambios necesarios.

Vista de los archivos a ser reestructurados.

Ahora vamos a observar que ya tenemos nuestros archivos bean justo donde queremos en nuestro
paquete py.com.systvent.bean.

Vista de los archivos dentro del paquete py.com.systvent.bean.

Miguel Angel Recalde. Pgina 126


Ingeniera del Software II Gua de Programacin

Ahora vamos a nuestra Ventana Principal y vamos a llamar desde all a la nueva ventana creada

Vista del nuevo evento a agregar al men tem Cliente.

Ahora dentro del evento agregamos los siguientes cdigos:

String args[] = new String[1];//creamos un vectorcito aqu de una sola posicin;

args[0] = "Registro de Clientes";//es este el parmetro que le pasamos a nuestro mtodo main

ClienteView.main(args);

Vista de los cdigos agregados.

Ahora nos vamos a la ventana ClienteView y modificamos el cdigo del mtodo main, ponemos que el
tipo de parmetro a recibir ser final y asignamos el titulo a la ventana frame.setTitle(args[0]);.

Miguel Angel Recalde. Pgina 127


Ingeniera del Software II Gua de Programacin

Vista de los cdigos agregados dentro del mtodo main.

Ahora solo nos queda probar nuestra ventana, para ello nos vamos a la Ventana principal y desde all
vamos a llamar a nuestra ventana de Clientes.

Vista del men tem Cliente de la Ventana principal.

Esta accin nos lleva a la ventana Registro de Clientes, donde presionamos el botn New y agregamos
los datos de un nuevo registro para nuestro Cliente y tambin agregamos los datos de sus direcciones,
luego presionamos el botn Save.

Miguel Angel Recalde. Pgina 128


Ingeniera del Software II Gua de Programacin

Vista de la ventana Registro cliente con los nuevos registros agregados.

Ahora vamos a comprobar si realmente nos guardo nuestro nuevo registro dentro de la Base de Datos,
para ello nos vamos nuestra tabla cliente.

Vista del registro agregado en la tabla cliente.

Tambin observamos los datos en nuestra tabla cliente_direecion.

Miguel Angel Recalde. Pgina 129


Ingeniera del Software II Gua de Programacin

Vista del registro agregado dentro de la tabla cliente_direccion.

Ahora vamos a cambiar de lugar la forma de visualizacin de los elementos en nuestro JTable, para ello
seguimos los siguientes pasos:

Seleccionamos el JTable, hacemos clic derecho sobre ella y elegimos la opcin Contenido de la tabla.

Vista de los pasos a seguir para visualizar el Contenido de la tabla

Esta accin nos lleva a la ventana de Personalizar dialogo donde podemos cambiar el ttulo, el ancho, si
la columna puede ser redimensionable, etc.

Miguel Angel Recalde. Pgina 130


Ingeniera del Software II Gua de Programacin

Vista de la ventana Personalizar dialogo.

Tambin podemos cambiar de posicin los campos, luego presionamos el botn Cerrar.

Vista de los cambios realizados

Hacemos lo mismo para el Detalle siguiendo los mismos pasos vistos anteriormente.

Miguel Angel Recalde. Pgina 131


Ingeniera del Software II Gua de Programacin

Vista de los cambios agregados dentro de los JTables.

Ahora para mejorar un poco el aspecto de nuestras ventanas vamos a agregarle unos paneles, para ello
seguimos los siguientes pasos, nos posicionamos sobre nuestro JTable, hacemos clic derecho sobre ella y
elegimos las opciones Incluir en => Panel.

Vista de los pasos para agregar un nuevo Panel a la ventana.

Seguimos los mismos pasos para nuestro detalle, primero la seleccionamos y luego hacemos clic derecho
sobre ella y elegimos las opciones Incluir en = >Panel.

Miguel Angel Recalde. Pgina 132


Ingeniera del Software II Gua de Programacin

Vista de los pasos para agregar un nuevo Panel a la ventana.

Tambin vamos a agregar nuestros botones dentro de un Panel, siempre siguiendo los mismos pasos
vistos anteriormente.

Vista de los pasos para agregar botones dentro de un Panel.

Ahora para tener un mejor control de la distribucin de nuestros componentes visuales, para ello
hacemos clic sobre nuestra ventana y elegimos las opciones Activar gestor de distribucin => Diseo
Absoluto.

Miguel Angel Recalde. Pgina 133


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para activar un Gestor de distribucin

Ahora vamos a agregarles colores de fondo a nuestros paneles y observamos los cambios.

Vista de ventana con los paneles agregados.

Luego siguiendo con nuestros Panel vamos a sus propiedades y elegimos un borde, para nuestro ejemplo
elegimos la opcin Borde con titulo y en Titulo agregamos Datos de Cliente.
Miguel Angel Recalde. Pgina 134
Ingeniera del Software II Gua de Programacin

Vista de las propiedades del JPanel1

Seguimos los mismos pasos para nuestro Panel del detalle, para nuestro ejemplo lo vamos a llamar
Direcciones de Cliente.

Vista de las propiedades del JPanel2

Ahora podemos observar los cambios realizados a nuestra ventana Registro de Clientes.

Miguel Angel Recalde. Pgina 135


Ingeniera del Software II Gua de Programacin

Vista de los cambios agregados.

Ahora agregamos un nuevo botn al que llamaremos Editar Cliente, tambin renombramos los botones
de la cabecera New por Ingresar cliente, Delete por Eliminar Cliente, tambin renombramos los botones
del detalle, el botn New por Ingresar Direccin, el botn Delete por Eliminar Direccin, el botn
Refresh por Cancelar Actualizacin y el botn Save por Guardar Datos.

Vista de la ventana ClienteView con la edicin de sus botones.

Ahora vamos a crear una nueva ventana Jdialog, para ello seguimos los siguientes pasos, nos
posicionamos sobre nuestro paquete py.com.systvent.view, hacemos clic derecho Nuevo => Otro.

Miguel Angel Recalde. Pgina 136


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para la creacin de una ventana Jdialog

Esta accin nos lleva al paso 1 de la Ventana Archivo Nuevo donde tenemos que Escoger el tipo de
archivo, para ello en Categoras elegimos Formularios de Interfaz grafica y en Tipos de Archivos
elegimos Formulario JDialog, luego hacemos clic en el botn Siguiente.

Vista del paso 1 de la ventana Archivo nuevo.

Miguel Angel Recalde. Pgina 137


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva al paso 2 de la creacin de nuestra ventana Nuevo JDialog Form donde tenemos
que asignarle un nombre, para nuestro ejemplo lo vamos a llamar ClienteEditView, luego hacemos clic
en el botn Terminar.

Vista del paso 2 Nombre y ubicacin de la nueva ventana JDialog.

Ahora podemos observar la nueva ventana JDialog creada.

Vista de la nueva ventana JDialog

Ahora nosotros debemos colocar cada una de las columnas que se encuentran en la cabecera dentro del
JDialog, para nuestro ejemplo solo vamos a seleccionar el Nombre, Profesin, Empresa, Tel. Empresa,
RUC y Referencia, el resto de las columnas queda como tarea para que ustedes lo agreguen, entonces
vamos a agregar seis campos de textos, seis etiquetas y dos botones Confirmar y Cancelar a nuestra
nueva ventana.

Miguel Angel Recalde. Pgina 138


Ingeniera del Software II Gua de Programacin

Vista de los componentes agregados a nuestra ventana JDialog.

Ahora vamos a asignarle un Nombre de variable a cada uno de nuestros componentes, por ejemplo para
el campo de texto Profesin lo vamos a llamar profesionTF, a Nombre le vamos a llamar nombreTF y as
renombramos todos los componentes.

Vista de las propiedades del JTextField al cual se ha cambiado el nombre de variable.

Ahora vamos a vincular cada campo de texto de la ventana con su correspondiente dentro de la
cabecera de la ventana Registro de Clientes, para nuestro ejemplo solo vamos a tomar estos seis campos
que se ven en la ventana y el resto pasa como tarea para ustedes.

Miguel Angel Recalde. Pgina 139


Ingeniera del Software II Gua de Programacin

Ahora cmo es que vamos a vincular estos campos?


Podramos intentar haciendo clic derecho sobre el campo de texto probando con la opcin Enlazar = >
text

Vista de la opcin Enlazar => text

Con esta accin podemos observar que no conseguimos obtener estos valores que esta en la cabecera
de otra ventana ClienteView.

Vista de los enlaces disponibles para el campo de texto nombreTF.

Entonces qu podemos hacer ac??


Lo que podemos hacer en este caso es crear una Propiedad dentro de nuestra ventana
ClienteEditView.java y agregar esa funcionalidad dentro de ella, veamos cmo podemos hacer eso.

Miguel Angel Recalde. Pgina 140


Ingeniera del Software II Gua de Programacin

Para agregar un propiedad son posicionamos en la fuente de nuestra ventana ClienteEditView, hacemos
clic derecho sobre ella y elegimos la opcin Insertar Cdigo.

Vista de los pasos a seguir para agregar una Propiedad

Lo que queremos ac es agregar una Propiedad, entonces elegimos de entre todas las propiedades
desplegadas la opcin Agregar Propiedad, observemos que con esta accin tambin podemos agregar
mtodos gets y sets, delegar mtodos, etc.

Vista de la opcin Agregar Propiedad

Miguel Angel Recalde. Pgina 141


Ingeniera del Software II Gua de Programacin

Ahora tenemos que definir cual ser el nombre de esa propiedad para nuestro ejemplo ser
registroActual, tambin tenemos que definir el tipo, para ello hacemos clic en Examinar y all elegimos
que ser del tipo cliente.

Vista de la ventana Encontrar tipo

Seleccionamos las siguientes opciones, que sea protegida (protected), que nos Cree los mtodos get y
set y que nos Genere soporte para cambio de propiedad.

Entonces Netbeans nos va a crear un registroActual, va a tener un get y set de tipo Cliente y tambin
una propiedad de cambios.

Vista de las propiedades a agregar

Miguel Angel Recalde. Pgina 142


Ingeniera del Software II Gua de Programacin

Esto es necesario para que nosotros podamos actualizar los datos de nuestra edicin con los datos de la
lnea actual del JTable del formulario ClienteView.java.

Entonces el prximo paso es hacer una modificacin en el mtodo set que creamos.

public void setRegistroActual(Cliente registroActual) {

Cliente oldRecord = this.registroActual;

this.registroActual = registroActual;

propertyChangeSupport.firePropertyChange("registroActual", oldRecord, registroActual);

Entonces con esto actualizamos ac el valor anterior para el valor actual.

Vista de los cdigos agregados dentro del mtodo set.

Ahora vamos a modificar el actionPerformed del botn Ingresar cliente, para ello seguimos pasos ya
conocidos por nosotros, nos posicionamos sobre ella, hacemos clic derecho Eventos => Action =>
actionPerformed.

Vista de los pasos a seguir para crear un nuevo evento

Miguel Angel Recalde. Pgina 143


Ingeniera del Software II Gua de Programacin
JFrame frame = new JFrame();

ClienteEditView ce= new ClienteEditView(frame,false);

ce.setVisible(true);

py.com.systven.bean.Cliente C = new py.com.systven.bean.Cliente();

entityManager.persist(C);

list.add(C);

int row = list.size()-1;

masterTable.setRowSelectionInterval(row, row);

masterTable.scrollRectToVisible(masterTable.getCellRect(row, 0, true));

Vista de las tres lneas de cdigo agregado

Ahora vamos a ejecutar nuestra Ventana Principal y desde all vamos a seleccionar nuestro tem de men
Cliente, una vez dentro de la ventana presionamos el botn Ingresar Cliente, esta accin llama a la
ventana JDialog llamado Datos del Cliente.

Vista de la ventana Datos del cliente

Miguel Angel Recalde. Pgina 144


Ingeniera del Software II Gua de Programacin

Ahora podemos observar que al cargar datos dentro los campos no se reflejan esos datos dentro de la
cabecera del JTable, entonces para conseguir eso vamos a vincular los datos de nuestro campo texto con
el masterTable, para ello seguimos los mismos pasos de siempre nos posicionamos sobre el campo de
texto, hacemos clic derecho Enlazar => text.

Vista de los pasos a seguir para enlazar un texto

Esta accin nos lleva a la ventana Enlace nombreTF donde en la pestaa Enlace nos aseguramos que el
Enlazado de la fuente este en Form y que el Enlazado de la expresin este en
registroActual.nomCliente.

Vista de las opciones a seleccionar dentro de la ventana Enlace nombreTF

Miguel Angel Recalde. Pgina 145


Ingeniera del Software II Gua de Programacin

Luego nos aseguramos de repetir los mismos pasos para los otros campos faltantes.

Ahora como nosotros vinculamos todos los edit, al vincular los datos estos son observables desde
cualquier punto del programa, esta funcionalidad se encuentra dentro del cdigo que muestra la figura.

Vista de la lista vinculada y observable.

Ahora vamos a repetir los mismos pasos vistos anteriormente, nos vamos a nuestra Ventana Principal,
desde all llamamos a nuestra ventana Registro de Cliente, luego presionamos el botn Ingresar Cliente,
esta accin llama a la ventana Datos del Cliente, agregamos los datos dentro de los campos de texto y
podemos observar que ya estn vinculados con la JTable de la ventana Registro de Clientes.

Vista de las ventanas Registro de Clientes y Datos de Cliente vinculadas.

Miguel Angel Recalde. Pgina 146


Ingeniera del Software II Gua de Programacin

Ahora vamos a codificar nuestro botn Confirmar, la verdad en este punto es que al confirmar se tiene
que comportar de la misma manera que nuestro botn Guardar Datos de la ventana Registro de
Clientes y si presionamos el botn Cancelar lo que estamos haciendo es lo mismo que la accin del
botn Cancelar las Actualizaciones, entonces esas acciones ya estn en esos botones.

Entonces como es que vamos a hacer eso all??


Vamos a tener que crear una nueva Propiedad que nos va a retornar un valor booleano all para nuestra
ventana Registro de Clientes, entonces nos vamos a la fuente de nuestra ventana ClienteEditView y
agregamos nuestra Propiedad, para ello hacemos clic derecho en la fuente y elegimos la opcin Insertar
cdigo.

Vista de los pasos a seguir para agregar una Propiedad

Esta accin nos muestra las opciones a elegir, pero lo que nosotros necesitamos es Agregar una
propiedad entonces seleccionamos esa opcin.

Vista de la propiedad a agregar.

Miguel Angel Recalde. Pgina 147


Ingeniera del Software II Gua de Programacin

Para nuestro ejemplo lo vamos a llamar a nuestra propiedad con el nombre de confirmarCliente y ella va
a ser del tipo boolean.

Vista de las opciones a agregar y seleccionar dentro de la ventana Agregar propiedad.

Ahora podemos observar dentro de la fuente de nuestra ventana ClienteEditView la propiedad que
acabamos de crear.

Vista de la nueva propiedad agregada.

Miguel Angel Recalde. Pgina 148


Ingeniera del Software II Gua de Programacin

Como podemos observar dentro de la fuente Netbeans nos creo un mtodo booleano
isConfirmarCliente y otro mtodo setConfirmaCliente al que mas tarde vamos a agregar las
funcionalidades que le faltan.

Ahora nos vamos a los eventos de nuestro botn Confirmar y all vamos a agregar un nuevo manejador
llamado guardarNuevoCliente, para ello nos vamos a las propiedades de nuestro botn Confirmar y en
el actionPerformed seleccionamos el editor personalizado, esta accin nos lleva a la ventana
Manejadores para actionPerformed donde presionamos el botn Agregar, esta accin nos muestra la
ventana Agregar manejador donde tenemos que agregar un Nombre del nuevo manejador al que
llamaremos guardarNuevoCliente, hacemos clic en el botn Aceptar.

Vista de las ventanas y de los pasos a seguir para agregar un manejador.

Ahora ya podemos observar dentro de la ventana Manejadores para actionPerformed el nuevo


manejador que agregamos.

Miguel Angel Recalde. Pgina 149


Ingeniera del Software II Gua de Programacin

Vista de la ventana Manejadores para actionPerformed con el manejador agregado

Presionamos nuevamente el botn Aceptar, luego podemos observar en la fuente de nuestra ventana
ClienteEditView el nuevo mtodo agregado.

Vista del mtodo agregado.

Dentro de este mtodo vamos a agregar los siguientes cdigos :

setConfirmarCliente(true);

setVisible(false);

Miguel Angel Recalde. Pgina 150


Ingeniera del Software II Gua de Programacin

Vista de las dos lneas de cdigo agregada.

Ahora vamos a agregar otro manipulador para nuestro botn Cancelar, para ello seguimos los mismos
pasos vistos anteriormente para el botn Confirmar, nos vamos en sus Propiedades y en la pestaa
Enlace en actionPerformed agregamos un nuevo manejador.

Vista de la ventana Manejadores para actionPerformed.

Presionamos el botn Agregar, esto nos lleva a la ventana Agregar manejador donde le damos el
nombre de cancelarNuevoCliente.

Miguel Angel Recalde. Pgina 151


Ingeniera del Software II Gua de Programacin

Vista de la ventana Agregar manejador.

Hacemos clic en el botn Aceptar, esta accin nos lleva nuevamente a la ventana Manejadores para
actionPerformed donde ya podemos observar el manejador que acabamos de agregar.

Vista de la ventana Manejadores para actionPerformed

Miguel Angel Recalde. Pgina 152


Ingeniera del Software II Gua de Programacin

Presionamos el botn Aceptar y ahora vemos el nuevo mtodo creado.

Vista del nuevo mtodo creado

El cdigo que vamos a utilizar es muy similar al de guardarNuevoCliente, la nica diferencia es que en
setConfirmarCliente() el parmetro es false, entonces agregamos esas dos lneas de cdigo.

setConfirmarCliente(false);

setVisible(false);

Vista de las dos lneas de cdigo agregadas

Ahora para que podamos conseguir la funcionalidad que estamos buscando tenemos que modificar
nuestro cdigo del botn Ingresar Cliente de nuestra ventana ClienteView.

ClienteEditView ce= new ClienteEditView(null,true);

ce.setRegistroActual(C);//

ce.setVisible(true);

if (ce.isConfirmarCliente()){

saveButton.doClick();//

}else {//sino

refreshButton.doClick }

Miguel Angel Recalde. Pgina 153


Ingeniera del Software II Gua de Programacin

Vista de los cdigos agregados y modificados.

Ahora vamos a probar a ver si esta funcionamos como queremos, para ello nos vamos a nuestra Ventana
Principal y desde all vamos a seleccin nuestro tem de men Cliente.

Vista del tem de men Cliente dentro de la Ventana Principal.

Miguel Angel Recalde. Pgina 154


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva a la ventana Registro de Cliente donde presionamos el botn Ingresar Cliente,
luego completamos todos los campos de esta ventana Datos de Cliente.

Vista de las ventanas Registro de cliente y Datos del cliente.

Presionamos el botn Confirmar y observamos los datos dentro de nuestra JTable dentro de nuestra
ventana Registro Cliente.

Vista de los datos agregados dentro de la ventana Registro de Cliente.

Ahora nos vamos del lado de la Base de datos para ver si realmente fue guardado los datos de nuestro
cliente.

Miguel Angel Recalde. Pgina 155


Ingeniera del Software II Gua de Programacin

Vista de los datos guardados dentro de la tabla cliente.

OK ahora vamos a agregarle funcionalidad a nuestro botn Editar Cliente, para ello vamos a seguir los
siguiente pasos, nos posicionamos sobre el botn Editar Cliente, hacemos clic derecho sobre ella y
elegimos Eventos => Action => actionPerformed.

Vista de los pasos a seguir para agregar un evento al botn Editar Cliente.

Esta accin nos lleva a la fuente de nuestra ventana ClienteView donde podemos observar el nuevo
evento agregado.

Vista de evento agregado dentro de la fuente de la ventana ClienteView.java

Miguel Angel Recalde. Pgina 156


Ingeniera del Software II Gua de Programacin

Luego a este evento le agregamos las siguientes lneas de cdigo:

ClienteEditView ce= new ClienteEditView(null,true); ce.setRegistroActual(list.get(masterTable.getSelectedRow

ce.setVisible(true);

if (ce.isConfirmarCliente()){

saveButton.doClick();

}else {

refreshButton.doClick();

Vista de las lneas de cdigo agregadas.

Ahora vamos a comprobar si funciona como queremos, para ello nos vamos a la Ventana Principal y all
elegimos nuevamente el tem de men Cliente.

Vista de la Ventana Principal Sistema de Ventas.

Miguel Angel Recalde. Pgina 157


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva a la ventana de Registro de clientes, luego seleccionamos un cliente de la lista
presionamos el botn Editar Cliente donde editamos los datos de nuestro cliente.

Vista de las ventanas Registro de Clientes y Datos del Cliente.

Presionamos el botn Confirmar y observamos en la ventana Registro de Clientes los cambios


realizados.

Vista de la ventana Registro de Clientes con los cambios realizados

Ahora veamos los cambios que hicimos desde Netbeans, para ello nos vamos en Prestaciones, y
seleccionamos la tabla clientes, hacemos clic derecho sobre ella y elegimos la opcin Mostrar datos.

Miguel Angel Recalde. Pgina 158


Ingeniera del Software II Gua de Programacin

Vista de las tablas desde Netbeans

Esta accin nos muestra los datos actualizados que tenemos guardados en nuestra tabla clientes.

Vista de los datos guardados en la tabla cliente

Miguel Angel Recalde. Pgina 159


Ingeniera del Software II Gua de Programacin

Programacion paso a paso de la ventana Movimiento Presupuesto de


Ventas.

Muy bien vamos ahora continuar con el modulo de Movimientos, en nuestro ejemplo vamos a
implementar el Movimiento Presupuesto de Venta, entonces para seguir con nuestro
ejemplo vamos a seguir los pasos vistos anteriormente, nos posicionamos sobre el paquete
py.com.systvent.view hacemos clic derecho sobre ella y elegimos Nuevo=> Formulario de
ejemplo maestro/detalle.

Vista de las opciones para la creacin de un formulario Maestro/Detalle.

Esta accin nos lleva a la ventana Nuevo Formulario Maestro / Detalle, en este punto vamos a
tratar de utilizar siempre los recursos del propio Netbeans, entonces le damos un nombre para
nuestro ejemplo lo llamaremos MovimientoPresupuestoVenta, luego presionamos el botn
Siguiente.

Miguel Angel Recalde. Pgina 160


Ingeniera del Software II Gua de Programacin

Vista del paso 2 de la ventana Nuevo Formulario maestro/detalle

Luego en el paso 3 Tabla maestro establecemos la conexin con nuestra Base de Datos
sistevent y seleccionamos nuestra tabla maestra que para nuestro ejemplo es cab_presupuesto,
presionamos el botn Siguiente.

Vista del paso 3 de la ventana Nuevo Formulario maestro/detalle

Miguel Angel Recalde. Pgina 161


Ingeniera del Software II Gua de Programacin

Esto nos lleva al paso 4 Opciones de detalle donde tenemos que seleccionar la tabla detalle,
como podemos observar esta tabla apunta a det_presupuesto, luego presionamos el botn
Terminar.

Vista del paso 4 de la ventana Nuevo Formulario maestro/detalle

Esta accin nos muestra que se est creando el formulario Maestro/Detalle con todos sus
componentes visuales.

Vista de la creacin del Nuevo Formulario maestro/detalle

Miguel Angel Recalde. Pgina 162


Ingeniera del Software II Gua de Programacin

Entonces en este punto Netbeans nos crea un formulario, podemos observar en la cabecera del
Presupuesto que tiene un cdigo, ese cdigo es autoincremento, tiene un cdigo de cliente, un
cdigo de funcionario, fecha del presupuesto y el valor del presupuesto.

En el Detalle vamos a tener el cdigo del presupuesto y el cdigo del producto, los dos cdigos
van a ser nuestra clave primaria.

Vista de la nueva ventana MovimientoPresupuestoVenta

Ahora el siguiente paso a seguir es poner en las Propiedades de JTable de la cabecera la opcin
autoResizeMode en OFF, esto nos va a permitir visualizar el scroll en la cabecera.

Miguel Angel Recalde. Pgina 163


Ingeniera del Software II Gua de Programacin

Vista del JTable con los cambios realizados.

Luego vamos a incluir en un Panel nuestra JTable de la cabecera, nuestro detalle y nuestros
botones, para ello seguimos los siguientes pasos:

Seleccionamos nuestra JTable, hacemos clic derecho sobre ella y elegimos la opcin Incluir en
=> Panel, hacemos lo mismo para el detalle.

Vista de los pasos a seguir para agregar un JTable a un Panel.

Miguel Angel Recalde. Pgina 164


Ingeniera del Software II Gua de Programacin

Para incluir nuestros botones dentro de Panel seguimos los siguientes pasos:

Seleccionamos todos los botones, hacemos clic derecho sobre ella y elegimos la opcin Incluir
en => Panel.

Vista de los pasos a seguir para agregar botones a un Panel.

Luego ordenamos nuestros paneles para darle un mejor diseo a nuestro formulario, para
nuestro ejemplo usaremos este diseo.

Vista del diseo propuesto para la ventana MovimientoPresupuestoVenta.

Miguel Angel Recalde. Pgina 165


Ingeniera del Software II Gua de Programacin

Aqu vamos a cambiar el nombre de los botones y vamos a cambiar el nombre del botn New
de la cabecera por Nuevo Presupuesto, luego vamos a eliminar el botn Delete de la cabecera,
renombramos el botn New del detalle por Agregar Item, tambin renombramos el botn
Delete del detalle por Eliminar, hacemos lo mismo con el botn Save lo cambiamos por
Guardar y por ultimo tambin ponemos Activar Gestin de Distribucin de nuestra ventana en
Diseo Absoluto.

Vista de los cambios de nombres en los botones.

Luego hacemos que los botones tengan el mismo ancho, para ello modificamos uno de los
botones con el ancho que queremos, luego seleccionamos los dems botones le hacemos clic
derecho y elegimos la opcin Mismo tamao = > Mismo Ancho.

Vista de los pasos a seguir para agregar un mismo ancho a los botones.

Miguel Angel Recalde. Pgina 166


Ingeniera del Software II Gua de Programacin

Y tambin que tengan el mismo alto, para ello modificamos uno de los botones con el alto que
queremos, luego seleccionamos los dems botones, le hacemos clic derecho y elegimos la
opcin Mismo tamao = > Misma Altura.

Vista de los pasos a seguir para agregar un mismo alto a los botones.

Ahora podemos observar que todos nuestros botones tienen el mismo ancho y tambin que
tienen el mismo alto.

Vista de los botones con los cambios realizados.

Miguel Angel Recalde. Pgina 167


Ingeniera del Software II Gua de Programacin

Ahora nos vamos a nuestra pestaa Proyectos y observamos que all Netbeans nos creo tres
archivos beans llamados CabPresupuesto.java, DetPresupuesto.java y DetPresupuestoPK.java.

Vista de los archivos beans creados dentro del paquete view.

Vamos a cambiar de ubicacin estos archivos, lo vamos a pasar al paquete


py.com.systvent.bean, para ello simplemente los seleccionamos y lo arrastramos sobre el
nombre del paquete, lo soltamos y esa accin hace que aparezca la ventana Mover clases,
seleccionamos el botn Reestructurar para que nos haga todos los cambios necesarios en e l
cdigo.

Miguel Angel Recalde. Pgina 168


Ingeniera del Software II Gua de Programacin

Vista de los archivos a ser reestructurados.

Ahora ya podemos observar los tres archivos que cambiamos de ubicacin.

Vista de los archivos reestructurados dentro del paquete bean.

Miguel Angel Recalde. Pgina 169


Ingeniera del Software II Gua de Programacin

Algo que todava no conversamos pero que es muy importante es que no hay que olvidar
cambiar el cdigo de cada uno de nuestros archivos bean, en cada uno de nuestros archivos
existe un mtodo llamado String toString, estos cambios ahora lo haremos para el archivo
CabPresupuesto, luego en DetPresupuesto, DetPresupuestoPK y en los dems archivos beans
generados queda a cargo de ustedes cambiar esta parte del cdigo.

Entonces en el mtodo toString cambiamos el view por bean, entonces el cdigo


"py.com.sysvent.view.CabPresupuesto[codPresupuesto=" + codPresupuesto + "]" cambiamos
por "py.com.sysvent.bean.CabPresupuesto[codPresupuesto=" + codPresupuesto + "]".

Vista del mtodo toString a ser cambiado.

Ahora nuestro cdigo debera quedar como se muestra en el grfico.

Vista del mtodo toString con el cambio realizado.

Miguel Angel Recalde. Pgina 170


Ingeniera del Software II Gua de Programacin

Ahora nos vamos al men de nuestra ventana principal y vamos a llamar desde all a nuestra
ventana de Presupuesto de Ventas, para ello nos posicionamos sobre el tem de men
Presupuesto, hacemos clic derecho sobre ella y elegimos Eventos => Action =>
actionPerformed.

Vista de los pasos a seguir para agregar un evento a un tem de men.

Esto nos lleva al evento private void jmi_presupuestoActionPerformed donde agregamos estas
tres lneas de cdigo:
String args[] = new String [1];

args[0] = "Movimiento - Registro de Presupuesto";

MovimientoPresupuestoVenta.main(args);

Miguel Angel Recalde. Pgina 171


Ingeniera del Software II Gua de Programacin

Vista de los cdigos agregados dentro del evento.

Ahora nos vamos al main de nuestra ventana MovimientoPresupuestoVenta, aqu en el main


colocamos que ser de tipo final, comentamos la lnea de cdigo donde aparece el
EXIT_ON_CLOSE, esto es para que al cerrar nuestra ventana no nos cierre nuestra aplicacin, y
le pasamos al frame el ttulo que definimos en el evento anterior.

Vista de los cdigos agregados dentro de main de la ventana MovimientoPresupuestoVenta.

Muy bien en este punto ya lo podemos ejecutar para observar como est quedando nuestra
ventana Movimiento Registro de Presupuesto, para ello ejecutamos nuestra aplicacin y nos
vamos al men Movimientos y all elegimos el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 172


Ingeniera del Software II Gua de Programacin

Vista del tem de men Presupuesto.

Esta accin llama a la ventana Movimiento Registro de Presupuesto.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 173


Ingeniera del Software II Gua de Programacin

Ahora vamos a intentar cargar un nuevo presupuesto, para ello presionamos el botn Nuevo
Presupuesto, ac solo vamos a cargar el Valor del Presupuesto y el cdigo del cliente, el cdigo
del presupuesto es autoincremento por eso lo dejamos as, ahora presionamos el botn
Guardar.

Vista de la ventana Movimiento Registro de Presupuesto con los datos agregados en la cabecera.

Ahora nos vamos a nuestra base de datos y all observamos los datos guardados en la tabla
cab_presupuesto.

Vista de los datos guardados en la tabla cab_presupuesto.

Miguel Angel Recalde. Pgina 174


Ingeniera del Software II Gua de Programacin

Por el momento vamos bien entonces vamos a colocar nuestro registro de detalle aqu, para
ello presionamos el botn Agregar Item y completamos los datos del detalle, ponemos en
Cantidad de Presupuesto 1, en Valor Unitario 100 y en Valor total 100, luego presionamos el
botn Guardar.

Vista de los datos cargados a la ventana Movimiento Registro de Presupuesto.

Y esta accin nos muestra que hubo una excepcin al tratar de guardar los datos del detalle.

Vista de la excepcin lanzada en la pestaa Salida.

Miguel Angel Recalde. Pgina 175


Ingeniera del Software II Gua de Programacin

La excepcin que nos muestra es la siguiente


jdbc4.MySQLIntegrityConstraintViolationException:, ella nos indica que la columna
cod_presupuesto no debe ser nula, tampoco puede ser nula el cdigo del producto, tambin
podemos observar que JPA trato de ejecutar un Insert y que fue en ese insert donde apareci
esa excepcin.

Vista de la excepcion lanzada en la pestaa Salida.

Este Insert intenta ingresar los siguientes valores 100, 100, null, 1, null, null, estos dos nulos
corresponden al cdigo del presupuesto (cod_presupuesto)y al cdigo del producto
(cod_producto).

Vista de la excepcion lanzada en la pestaa Salida.

Miguel Angel Recalde. Pgina 176


Ingeniera del Software II Gua de Programacin

Ahora si nosotros observamos nuestra tabla det_ presupuesto nos damos cuesta que el cdigo
del presupuesto y el cdigo del producto (cod_producto) no aceptan nulos, y ambas claves
forman nuestra clave primaria.

Vista de las claves primarias de la tabla det_presupuesto.

Ahora si nos vamos nuevamente a nuestra ventana de Movimiento - Registro de Presupuesto


podemos observar que en el detalle Netbeans no nos coloco el Cdigo del Presupuesto ni el
Cdigo de Producto, entonces nosotros de alguna manera tenemos que conseguir esa
funcionalidad.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 177


Ingeniera del Software II Gua de Programacin

Ahora en este punto lo primero que tenemos que tratar de entender que es lo que Netbeans
hizo con nuestras clases, entonces lo primero que vamos a hacer es ir a nuestro paquete
py.com.systvent.bean y all encontramos los archivos beans CabPresupuesto, DetPresupuesto y
DetPresupuestoPK.

Vista de los archivos bean dentro del paquete py.com.systven.bean.

El primer archivo bean que vamos a mirar es CabPresupuesto, aqu podemos observar que
Netbeans nos cre un anotation @GeneratedValue, esta anotacin que hace que se cree el
cdigo auto numrico del lado de la Base de Datos, tambin podemos observar que esta
haciendo en mapeamiento con nuestra tabla cab_presupuesto, nada nuevo comparado con lo
que ya hemos visto antes.

Miguel Angel Recalde. Pgina 178


Ingeniera del Software II Gua de Programacin

Vista de las anotaciones dentro del archivo CabPresupuesto.

Ahora nos vamos a nuestro archivo DetPresupuesto, ella tiene tambin un mapeamiento,
observamos que ella tiene una anotation @EmbeddedId que es de tipo DetPresupuestoPK, y
que significa eso??

Vista de las anotaciones dentro del archivo DetPresupuesto.

Miguel Angel Recalde. Pgina 179


Ingeniera del Software II Gua de Programacin

Cuando nosotros tenemos una clave primaria compuesta la especificacin JPA ella en este
punto crea otra clase, esta clase DetPresupuestoPK debe ser creada para poder implementar
esa clave primaria compuesta.

Vista del archivo DetPresupuestoPK.

Por eso esta clase DetPresupuestoPK implementa nuestra clave compuesta con esos dos
campos que son cod_presupuesto y cod_producto.

Vista de las anotaciones dentro del archivo DetPresupuestoPK.

Miguel Angel Recalde. Pgina 180


Ingeniera del Software II Gua de Programacin

Entonces esto es lo que hace JPA para implementar estas clases.

Ahora vamos a hacer un Debug sobre el cdigo del botn Agregar Item para tratar de entender
que es lo que est pasando en este punto, para ello nos posicionamos sobre ella, presionamos
clic derecho y elegimos las opciones Eventos => Action => actionPerformed.

Vista de los pasos a seguir para agregar un evento al botn Agregar Item.

Esto nos lleva a la fuente donde se encuentra el evento, all vamos a colocar en este punto un
BreakPoint o un Punto de interrupcin de lnea, para poner ese punto lo nico que hacemos es
hacer clic sobre la lnea 230 y esa accin hace que se marque con un icono cuadrado de color
rosa, con esto marcamos esa lnea de cdigo para poder recorrerlo paso a paso.

Miguel Angel Recalde. Pgina 181


Ingeniera del Software II Gua de Programacin

Vista del Punto de interrupcin dentro evento newDetail.

Existen varias formas de hacer el debug, una de ellas es presionar el icono Debug Main Project,
la otra es haciendo clic derecho sobre la fuente y elegimos la opcin Debug File, all lo que
tenemos que hacer es depurar nuestra ventana de MovimientoPresupuestoVenta.

Miguel Angel Recalde. Pgina 182


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para comenzar a debugar el evento newDetail.

Esto llama a la ventana de Presupuesto de venta donde tenemos que seleccionar nuestro
presupuesto y luego presionamos el botn Agregar Item, es en este momento cuando se activa
nuestro Break Point, luego en la parte de abajo en la pestaa Variables es donde podemos
hacer nuestro seguimiento y tambin podemos observar que nos marc en color verde la lnea
de cdigo que habamos marcado con el BreakPoint.

Miguel Angel Recalde. Pgina 183


Ingeniera del Software II Gua de Programacin

Vista de las variables en memoria dentro de la pestaa Variables.

En este punto vamos a recorrer lnea por lnea para ver cules son los valores que estn
tomando nuestras variables, para ello vamos a presionar F8 o tambin podemos presionar el
icono que muestra en la figura, existen otras opciones para recorrer dentro de los mtodos que
son llamados pero eso no lo vamos a mirar por el momento que es utilizando F8.

Miguel Angel Recalde. Pgina 184


Ingeniera del Software II Gua de Programacin

Vista de los valores de las variables en memoria dentro de la pestaa Variables.

Podemos observar en la pestaa Variables todos los objetos que en este momento estn en
memoria, ahora al presionar F8 podemos observar que el valor de esa variable Index es 0.

Miguel Angel Recalde. Pgina 185


Ingeniera del Software II Gua de Programacin

Vista del valor de la variable index.

Y eso porque??, porque el ahora esta en la primera lnea de la cabecera o sea en esta en la
primera lnea de nuestro MasterTable.

Miguel Angel Recalde. Pgina 186


Ingeniera del Software II Gua de Programacin

Vista del valor de la variable index.

Luego vemos en la segunda lnea que Netbens va a instanciar es CabPresupuesto o sea un


objeto de tipo CabPresupuesto y Netbeans va a hacer que este CabPresupuesto sea un objeto
que esta en la lnea seleccionada (Index), en la lnea cero que es nuestro caso, donde el index
es cero, y es lo mismo que va a pasar, damos F8 y observamos que se cre el Objeto c.

Miguel Angel Recalde. Pgina 187


Ingeniera del Software II Gua de Programacin

Vista del valor de la variable index.

Presionamos nuevamente F8 y observamos el valor del objeto ds que en realidad es una


coleccin de objetos.

Miguel Angel Recalde. Pgina 188


Ingeniera del Software II Gua de Programacin

Vista de la referencia del valor en memoria del objeto c.

All observamos los valores que tenemos en memoria con ese objeto c, presionamos el icono +
para observar sus valores.

Miguel Angel Recalde. Pgina 189


Ingeniera del Software II Gua de Programacin

Vista del valor del cdigo del presupuesto.

Ahora podemos observar que el codPresupuesto de nuestro presupuesto es 1, que es de tipo


entero, tambin podemos observar que el cdigo del cliente y del funcionario son nulos.

Ahora vamos a instanciar un objeto de tipo DetPresupuesto para ello nuevamente presionamos
F8, observemos que DetPresupuesto es un atributo de CabPresupuesto, ahora nosotros
instanciamos ese objeto c apuntando para el get del DetPresupuestoList () OK.

Miguel Angel Recalde. Pgina 190


Ingeniera del Software II Gua de Programacin

Vista del valor del tamao de la coleccin ds.

Y es en ese punto de la condicional IF donde Netbeans va a preguntar, si ese objeto ds que


nosotros acabamos de instanciar es nulo, presionamos nuevamente F8.

Miguel Angel Recalde. Pgina 191


Ingeniera del Software II Gua de Programacin

Vista del valor del tamao de la coleccin ds.

Como nosotros podemos observar all no es nulo, entonces pasa en la lnea e DetPresupuesto d
para instanciar un nico bean, fjense que all nosotros tenemos una lista (List).

Es una lista que cabe dentro de varios DetPresupuesto y aqu en la lnea verde vamos a
instanciar un nico DetPresupuesto, fjense que en la lista tenemos una tablita de
DetPresupuesto y aqu apenas un nico registro y lo vamos a instanciar ahora con F8.

Instanciamos ese d que es nuestro DetPresupuesto, como vemos si desplegamos el valor del
objeto d observamos que todos sus campos estn en nulos.

Miguel Angel Recalde. Pgina 192


Ingeniera del Software II Gua de Programacin

Vista de la referencia en memoria del objeto d y del valor de detPresupuestoPK.

Ac lo importante es observar es que detPresupuestoPK es equivalente a dos campos de


nuestra tabla que son cod_presupuesto y cod_producto.

Damos F8 y JPA va a Persistir el objeto d y luego en la prxima lnea de cdigo va a setar en el


objeto d CabPresupuesto con el objeto c (d.setCabPresupuesto(c);)

Miguel Angel Recalde. Pgina 193


Ingeniera del Software II Gua de Programacin

Vista de la referencia en memoria del objeto d

Observemos que c es un objeto de tipo CabPresupuesto, y luego observamos que ese atributo d
de DetPresupuesto que apunta a CabPresupuesto.

Vista de la referencia en memoria del objeto d.

Miguel Angel Recalde. Pgina 194


Ingeniera del Software II Gua de Programacin

Y ese es el atributo que vamos a setar ahora con el objeto c, ahora vamos a presionar
nuevamente F8 y ya fue setado.

Vista de la referencia en memoria del atributo cabPresupuesto.

Este objeto d es lo mismo que este objeto c ahora y tienen los mismos valores, este objeto c
contiene atributos, este detPresupuestoList tiene varios objetos c o apunta a varios de ellos en
la lista.

Vamos a continuar ahora para ver que es lo que va a pasar presionando F8.

Vamos a adicionar ahora dentro de nuestro objeto ds, que es nuestra coleccin que apunta a
DetPresupuestoList, entonces nosotros vamos a almacenar en ella el bean que acabamos de
setar.

Miguel Angel Recalde. Pgina 195


Ingeniera del Software II Gua de Programacin

Vista de la referencia en memoria del objeto ds.

En este punto es como si estamos agregando un registro en una tabla, damos F8 y vamos a
limpiar la seleccin del masterTable.

Ah todo tranquilo no apareci ningn problema, presionamos F8 pegamos un interval del lado
del masterTable.

Miguel Angel Recalde. Pgina 196


Ingeniera del Software II Gua de Programacin

Vista de las refererencias en memoria de todas las variables.

Presionamos nuevamente F8,la variable row ahora toma el valor de cero, all es el tamao de ds
menos 1 (int row = ds.size()-1;),

Miguel Angel Recalde. Pgina 197


Ingeniera del Software II Gua de Programacin

Vista de la referencia en memoria del objeto ds.

Damos F8 y ahora vamos a setar la tabla de detalle que en este caso va a ser cero, es cero
porque ser el primer registro del JTable del detalle, presionamos F8 nuevamente y hasta ah no
hay problema alguno.

Miguel Angel Recalde. Pgina 198


Ingeniera del Software II Gua de Programacin

Vista de la pestaa Variables sin ningn valor en la memoria.

Entonces vemos que el botn Nuevo Presupuesto por el momento no tiene ningn problema,
todo esto para descubrir que el problema no esta en el botn Nuevo Presupuesto.

Entonces si el problema no esta en el botn Nuevo Presupuesto donde es que esta el


problema??

El problema va a estar posiblemente en el botn Guardar.

Entonces vamos a debugar este botn, para ello seguimos los siguientes pasos:

Nos posicionamos sobre el botn Guardar, hacemos clic derecho sobre ella y elegimos las
opciones Eventos => Action => actionPerformed.

Miguel Angel Recalde. Pgina 199


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar un evento al botn Guardar.

Vamos a seguir el rastro a este botn, le vamos a poner un BreakPoint a este commit, para ello
hacemos clic sobre la lnea 271 y ahora aparece el BreakPoint marcando esa lnea de color rosa.

Vista de los pasos a seguir para agregar un BreakPoint.

Miguel Angel Recalde. Pgina 200


Ingeniera del Software II Gua de Programacin

Entonces vamos a hacer correr nuevamente nuestro debug, para ello hacemos clic en icono
Debug Main Project.

Vista de los pasos a seguir para comenzar en Debug.

Esta accin hace que aparezca nuestra ventana Sistema de Ventas, luego nos vamos a nuestro
men Movimiento y dentro de ella elegimos el tem de men Presupuesto.

Vista de los pasos a seguir para seleccionar el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 201


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva a la ventana Movimiento Registro de Presupuesto.

Vista de la ventana Movimiento Registro de Presupuesto.

Seleccionamos la lnea del presupuesto que guardamos anteriormente, luego presionamos el


botn Agregar Item, completamos los datos del detalle, en Cantidad de Presupuesto ponemos
1, en Valor Unitario ponemos 100 y en Valor Total asignamos 100.

Vista de los pasos a seguir para Agregar un Item.

Y por ltimo presionamos el botn Guardar.

Vamos nuevamente en el cdigo, en la parte de abajo en la pestaa Variables en this podemos


observar todos los objetos que pertenecen a la ventana y que ya estn en este momento en
memoria.
Miguel Angel Recalde. Pgina 202
Ingeniera del Software II Gua de Programacin

Vista de las variables en memoria.

Entonces vamos a dar en este punto F8 para que el realice el commit y ah podemos observar
que el entityManager .getTransaction.commit automticamente pasa al catch para ejecutar el
RollbackExcepcion y el va a imprimir printStackTrace.

Miguel Angel Recalde. Pgina 203


Ingeniera del Software II Gua de Programacin

Vista de la referencias en memoria de las variables this, evt y rex.

Le damos F8 y en la pestaa salida si nos fijamos nos da un problema y cual fue?? El esta
pasando un cdigo de presupuesto y un cdigo de producto nulos.

Vista de la excepcin lanzada en la pestaa sysvent(debug).

Miguel Angel Recalde. Pgina 204


Ingeniera del Software II Gua de Programacin

Todo esto que hicimos fue para darnos cuenta que el problema aparece a presionar el botn
Guardar, pero como ya vimos el botn Agregar Item el no presenta problemas pero la solucin
que vamos a usar va a partir de desde all.

Nosotros tenemos que informar que el Cdigo del Producto y el Cdigo del Presupuesto de la
cabecera son claves primarias, de alguna manera tenemos que informar eso para nuestra tabla
y como es que podemos conseguir eso??

Bueno para nosotros poder entender vamos a tener que debugarlo nuevamente, observemos
que es el botn nuevoDetalle (newDetail).

Vista del evento del botn newDetail.

Marcamos con el Break Point y hacemos correr nuestro Debug nuevamente presionando el
icono Debug Main Project.

Miguel Angel Recalde. Pgina 205


Ingeniera del Software II Gua de Programacin

Vista del icono Debug Main Project.

Esta accin hace que se ejecute la ventana principal Sistema de Ventas, en ella nos vamos al
men Movimiento y all elegimos el tem de men Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 206


Ingeniera del Software II Gua de Programacin

Ahora en la ventana Movimiento Registro de Presupuesto seleccionamos el presupuesto que


tenemos en la cabecera y luego presionamos el botn Agregar Item.

Vista de la ventana Movimiento Registro de Presupuesto.

Esto hace que se active nuestro BreakPoint y nos lleva a la fuente nuevamente, ahora
presionamos F8 para comenzar a debugar.

Vista de las variables en memorias mostradas en la pestaa Variables.

Miguel Angel Recalde. Pgina 207


Ingeniera del Software II Gua de Programacin

Vamos a colocar un Nuevo Item abajo y Netbeans comenz a Debugar, lo importante es


observar que es lo que pasa ac en este punto d.setCabPresupuesto(c).

Vista del objeto d en memoria.

Ah tenemos la variable d, luego en el setCabPresupuesto(c) nos damos cuenta que el objeto d


tiene un atributo del Tipo detPresupuestoPK y que tiene un valor null.

Entonces nosotros tenemos que encontrar una forma de informar a JPA que estas son las dos
claves primarias, cdigos de producto y el cdigo de la venta en el detalle.

Entonces observemos como es que podemos conseguir eso ahora, antes de Persistir el objeto d
vamos a crear una variable DetPresupuestoPK para instanciar el objeto.

Miguel Angel Recalde. Pgina 208


Ingeniera del Software II Gua de Programacin

Vista de la nueva lnea de cdigo agregada el evento.

DetPresupuestoPK dpk = new DetPresupuestoPK();

Ahora agregamos los siguientes cdigos:

dpk.setCodProducto("1111222222");//este codigo debe existir en la tabla producto de la BD

dpk.setCodPresupuesto(c.getCodPresupuesto());

d.setDetPresupuestoPK(dpk);

Miguel Angel Recalde. Pgina 209


Ingeniera del Software II Gua de Programacin

Vista de las nuevas lneas de cdigo agregadas el evento.

Entonces vamos a apuntar el atributo DetPresupuestoPK que la verdad representa esos dos
campos dpk CodPresupuesto y CodProducto, donde ya se atribuye los dos campos que nosotros
queremos.

Ahora vamos a debugar nuevamente para ver pasa con estos cambios, lo marcamos
nuevamente, luego presionamos el icono Debug Main Project .

Miguel Angel Recalde. Pgina 210


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar un BreakPoint.

Nuevamente nos lleva a la ventana Sistema de Ventas donde seleccionamos el men


Movimiento y dentro de ella el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 211


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Esto nos lleva a la ventana Movimiento Registro de Presupuesto, donde seleccionamos el


presupuesto de la cabecera y presionamos el botn Agregar Item.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 212


Ingeniera del Software II Gua de Programacin

Presionamos F8, y podemos observar los valores de las variables, en c podemos observar que el
cdigo de presupuesto (codPresupuesto) esta en 1.

Vista del objeto c en la pestaa Variables.

Seguimos presionando F8, podemos observar que dpk ya tiene una referencia, tambin
podemos observar que el cdigo del presupuesto y que el cdigo del producto ya tienen sus
valores.

Miguel Angel Recalde. Pgina 213


Ingeniera del Software II Gua de Programacin

Vista de los valores de los atributos codPresupuesto y codProducto en la pestaa Variables.

Seguimos presionando F8, F8 . Hasta que aparezca la opcin de agregar valores al detalle,
completamos los datos y presionamos el botn Guardar.

Vista de la ventana Movimiento Registro de Presupuesto con todos los datos cargados.

Miguel Angel Recalde. Pgina 214


Ingeniera del Software II Gua de Programacin

Veremos que no aparecen las excepciones que aparecieron anteriormente en la pestaa


sistvent(run).

Vista de la pestaa sysvent (run).

Ahora si nos vamos a nuestra Base de Datos podemos observar que en la tabla
cab_presupuesto nos guardo nuestros datos.

Miguel Angel Recalde. Pgina 215


Ingeniera del Software II Gua de Programacin

Vista del registro guardado en la tabla cab_presupuesto.

Y si nos vamos a nuestra Base de Datos podemos observar que en la tabla det_presupuesto
tambin nos guard nuestros datos.

Vista los pasos a seguir para Mostrar los datos de la clase det_presupuesto.

Ahora vamos a hacer lo siguiente, vamos a tratar de agregar un nuevo presupuesto, para ello
ejecutamos nuevamente nuestro programa, esto nos lleva nuevamente a la ventana Sistema de
Ventas.
Miguel Angel Recalde. Pgina 216
Ingeniera del Software II Gua de Programacin

Vista de la ventana Sistema de Ventas.

Nos vamos al men Movimiento y dentro de ella elegimos el tem de men Presupuesto, ahora
dentro de nuestra ventana Movimiento Registro de Presupuesto presionamos el botn
Nuevo Presupuesto, completamos los datos de la cabecera.

Vista de la ventana Movimiento Registro de Presupuesto.

Ahora presionamos el botn Agregar Item, luego seguimos con el debug presionando F8, en
este punto podemos observar que el valor de d en codPresupuesto esta nulo.

Miguel Angel Recalde. Pgina 217


Ingeniera del Software II Gua de Programacin

Vista del valor del atributo codPresupuesto en la pestaa Variables.

Seguimos presionando F8, en este punto podemos observar que el codPresupuesto esta en 0.

Miguel Angel Recalde. Pgina 218


Ingeniera del Software II Gua de Programacin

Vista del valor del atributo codPresupuesto en la pestaa Variables.

Seguimos presionando F8 y en la pestaa systvent debug podemos apreciar que aparece un


nullPointerExcepction.

Miguel Angel Recalde. Pgina 219


Ingeniera del Software II Gua de Programacin

Vista de la Excepcin lanzada en la pestaa sysvent (debug).

Ella nos esta informando que el cdigo en nuestra CabPresupuesto esta en null, nosotros
estamos intentando atribuir un valor nulo a un atributo en este caso es
dpk.setCodPresupuesto(c.getCodPresupuesto());

Entonces qu es lo que vamos a hacer aqu?? Para resolver ese problema nosotros tenemos que
hacer una modificacin a nuestro cdigo, nos damos cuenta que aqu el cdigo no es de forma
automtica, cuando el graba en la Base de Datos el graba de forma automtica y en ese
momento de la grabacin el cdigo es retornado, solo que en este momento nosotros no
grabamos nada en la Base de Datos, entonces vamos a hacer lo siguiente

Vamos a pegar una parte del cdigo del botn Guardar y lo vamos a commitar en esa
transaccin nueva y eso tiene que ser antes de comenzar todo el proceso de Agregar Item,
entonces ahora agregamos estas dos lineas de codigo:

Miguel Angel Recalde. Pgina 220


Ingeniera del Software II Gua de Programacin
entityManager.getTransaction().commit();

entityManager.getTransaction().begin();

Vista de las lneas de cdigos agregadas al evento newDetail.

Entonces cuando hacemos clic en el botn Agregar Item, JPA va a commitar la transaccin,
recupera el cdigo del presupuesto, luego inicia una nueva transaccin y comienza a ejecutar
los datos del detalle.

Ahora vamos a ejecutarlo directamente, para ello en la ventana Sistema de Ventas elegimos el
men Movimiento y dentro de ella el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 221


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Esta accin nos lleva a la ventana Movimiento Registro de Presupuesto donde presionamos el
botn Nuevo Presupuesto, luego completamos los datos en la cabecera.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 222


Ingeniera del Software II Gua de Programacin

Ahora presionamos el botn Agregar item y luego completamos los datos en el detalle.

Vista de la ventana Movimiento Registro de Presupuesto con los datos asignados.

Presionamos el botn Guardar, observamos que en la pestaa systvent_1 no aparece ninguna


excepcin.

Vista de la pestaa sysvent (run).

Miguel Angel Recalde. Pgina 223


Ingeniera del Software II Gua de Programacin

Ahora nos vamos a mirar nuestras tablas del lado de la Base de Datos para ver si los datos que
agregamos fueron grabados, comenzamos primero con nuestra tabla cab_presupuesto.

Vista de los datos almacenados en la tabla cab_presupuesto.

Ahora observamos nuestra tabla det_presupuesto.

Vista de los datos almacenados en la tabla det_presupuesto.

Miguel Angel Recalde. Pgina 224


Ingeniera del Software II Gua de Programacin

Podemos observar que los datos fueron almacenados sin ningn problema.

Muy bien ahora vamos a buscar la forma de hacer aparecer el cdigo del producto en la parte
de abajo en el detalle, la manera que esta mostrando no es la correcta, para conseguir eso
seguimos los pasos conocidos anteriormente, nos posicionamos sobre la tabla del detalle,
hacemos clic derecho sobre ella y elegimos la opcin Contenido de tabla.

Vista de los pasos a seguir para acceder al Contenido de la tabla.

Nos vamos a la pestaa Columnas, all vamos a insertar una nueva columna, para ello
presionamos el botn Insertar, esto hace que aparezca una nueva fila para insertar la nueva
columna.

Miguel Angel Recalde. Pgina 225


Ingeniera del Software II Gua de Programacin

Vista de las columnas dentro de la ventana Personalizar Dialogo.

En la nueva fila completamos el titulo con Cdigo, luego en la lista desplegable Expresin
buscamos dentro de la carpeta DetPresupuestoPK el cdigo del producto (codProducto).

Vista de los pasos a seguir para agregar un Titulo y una Expresin dentro de la ventana Personalizar Dialogo.

Miguel Angel Recalde. Pgina 226


Ingeniera del Software II Gua de Programacin

En esta ventana Personalizar Dialogo podemos controlar que las columnas puedan ser editables
y redimensionarles, tambin podemos cambiar el ancho.

Vista de las opciones Editables y Redimensionables.

Podemos observar que el cdigo del producto agregado es de tipo String, luego presionamos el
botn Cerrar.

Vista del tipo String asignado a la columna Codigo.

Miguel Angel Recalde. Pgina 227


Ingeniera del Software II Gua de Programacin

Ahora vamos a hacer correr nuevamente nuestro programa, en la ventana Sistema de Ventas
elegimos el men Movimientos y dentro de ella el tem de men Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Como podemos observar ya aparece el cdigo del producto que agregamos en el detalle.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 228


Ingeniera del Software II Gua de Programacin

Por el momento tenemos todo funcionando pero necesitamos hacer algunos cambios para
mejorar la visualizacin de nuestra pantalla, esta parte de la cabecera nosotros no lo vamos a
usar con una JTable sino que lo vamos a usar con campos de textos o JtextFields, entonces lo
primero que vamos a hacer es asignar un ttulo a nuestro panel, para ello nos vamos en sus
propiedades y all hacemos los cambios, en border elegimos la opcin Borde con ttulo y le
agregamos el Titulo de Cabecera.

Vista de los pasos a seguir para agregar un Titulo a un jPanel de la Cabecera.

Luego vamos a cambiar el ttulo en el detalle, para ello nos vamos nuevamente en sus
Propiedades, en border elegimos nuevamente la opcin Borde con Titulo y agregamos el Titulo
al que llamaremos Detalle de Presupuesto.

Miguel Angel Recalde. Pgina 229


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar un Titulo a un jPanel al Detalle.

Ahora ya podemos observar los cambios realizados a nuestra ventana


MovimientoPresupuestoVenta.

Vista de los cambios realizados al Panel.

Miguel Angel Recalde. Pgina 230


Ingeniera del Software II Gua de Programacin

Entonces no vamos a usar este JTable de la cabecera pero ella nos va a ser muy til entonces no
lo vamos a eliminar porque ella tiene todos los recursos del Binding o vinculacin encima de
este JTable, porque si lo eliminamos tenemos que empezar a vincular nuevamente todos los
componentes y eso significa mucho trabajo, entonces la mejor idea es ocultarlo para aprovechar
esos recursos, entonces vamos a continuar con la parte visual para ello agregamos seis campos
de textos, una lista desplegable con sus respectivas etiquetas.

Vista de los campos de textos, etiquetas y listas desplegables.

Aqu en el nombre del cliente ella no debera de ser editable entonces nos vamos en sus
propiedades y desmarcamos la opcin enabled.

Vista de los pasos a seguir para deshabilitar un campo de texto.

Miguel Angel Recalde. Pgina 231


Ingeniera del Software II Gua de Programacin

Tambin vamos deshabilitar el campo Total General y vamos a indicarle que el foco no pase por
ese campo para ello nos vamos a sus propiedades y desmarcamos enabled y focusable.

Vista de los pasos a seguir para deshabilitar un campo de texto.

Ahora vamos a vincular cada componente a nuestra masterTable para ello seguimos los
siguientes pasos, nos posicionamos sobre el campo de texto del codigo, la seleccionamos y
hacemos clic derecho sobre ella, luego elegimos las opciones Enlazar => text.

Vista de los pasos a seguir para enlazar un campo de texto.

Miguel Angel Recalde. Pgina 232


Ingeniera del Software II Gua de Programacin

Esto nos lleva a la ventana Enlace donde en la lista desplegable Enlazado de fuente tenemos
que seleccionar nuestro masterTable y en Enlazado de expresin tenemos que enlazar a la
selectedElement.codPresupuesto, luego hacemos clic en el botn Aceptar.

Vista de la ventana Enlace.

Seguimos los mismos pasos para nuestro cliente, nos posicionamos sobre el campo de texto del
cliente, la seleccionamos y hacemos clic derecho sobre ella, luego elegimos las opciones Enlazar
=> text.

Esto nos lleva a la ventana Enlace donde en la lista desplegable Enlazado de fuente tenemos
que seleccionar nuestro masterTable y en Enlazado de expresin tenemos que enlazar a la
selectedElement.codCliente.

Vista de la ventana Enlace.

Miguel Angel Recalde. Pgina 233


Ingeniera del Software II Gua de Programacin

Ahora antes de continuar con nuestra lista desplegable vamos a tener que hacer algunos
cambios en el bean de CabPresupuesto, primero vamos a comentar nuestro cdigo de
coduncionario, luego agregamos las siguientes lneas de cdigo:
@JoinColumn(name = "cod_funcionario", referencedColumnName ="cod_funcionario" )

@ManyToOne //con esta anotacin estoy diciendo que tengo muchos Presupuestos para este funcionario

Vista de los cambios realizados al codigo del archivo CabPresupuesto.

Ahora en este punto nos damos cuenta que vamos a necesitar del bean del funcionario, todava
no lo hemos creado as que vamos a aprovechar y lo creamos ahora, para ello seguimos los
mismos pasos vistos anteriormente, nos posicionamos sobre el paquete py.com.systvent.view,
la seleccionamos y luego hacemos clic derecho sobre ella, luego elegimos las opciones Nuevo =>
Formulario de ejemplo maestro/detalle.

Miguel Angel Recalde. Pgina 234


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar un formulario maestro/detalle.

Esta accin nos lleva a la ventana Nuevo Formulario maestro/detalle, en Nombre de la clase
para nuestro ejemplo vamos lo vamos a llamar FuncionarioView, presionamos el botn
Siguiente.

Vista del paso 2 Nombre y ubicacin de la ventana Nuevo Formulario maestro/detalle.

Miguel Angel Recalde. Pgina 235


Ingeniera del Software II Gua de Programacin

Luego definimos la conexin y seleccionamos la tabla maestro que para nuestro ejemplo ser
funcionario, en el paso 4 en Opciones de detalle elegimos la opcin Cuadros de texto y
pasamos del codigo del funcionario (cod_funcionario) del lado de Campos disponibles, luego
presionamos el botn Terminar.

Vista del paso 2 Opciones de detalle de la ventana Nuevo Formulario maestro/detalle.

Esta accin nos muestra que se esta creando un formulario Maestro/Detalle junto con todos
sus componentes.

Vista de la creacin del Formulario maestro/detalle.

Miguel Angel Recalde. Pgina 236


Ingeniera del Software II Gua de Programacin

Ahora ya podemos observar el formulario creado al que ya le cambiamos por el momento las
etiquetas.

Vista del nuevo formulario FuncionarioView.

OK ahora que ya tenemos creado el bean del funcionario en el paquete py.com.systvent.view y


lo vamos a pasar al paquete py.com.systvent.bean, para ello seleccionamos el archivo
Funcionario.java, lo arrastramos y lo soltamos sobre el nombre del paquete.

Vista del archivo Funcionario.java a ser cambiado de paquete.

Miguel Angel Recalde. Pgina 237


Ingeniera del Software II Gua de Programacin

Esta accin hace que aparezca la ventana Mover clase donde seleccionamos el botn
Reestructurar.

Vista de la ventana Mover clase para Reestructurar un archivo.

Ahora vamos a llamar a nuestro funcionario desde la Ventana Principal para ello nos vamos a
nuestro men Registros y dentro de ella seleccionamos el tem de men Funcionario, luego
hacemos clic derecho sobre ella y elegimos las opciones Eventos => Action => actionPerformed.

Vista de los pasos a seguir para agregar un evento al tem de men Funcionarios.

Miguel Angel Recalde. Pgina 238


Ingeniera del Software II Gua de Programacin

Esta nos lleva al evento jmi_funcionario donde pegamos estas tres lneas de cdigos:
String args[] = new String [1];

args[0] = "Registro de Funcionarios";

FuncionarioView.main(args);

Vista de las lneas de codigo agregadas al evento.

Luego nos vamos al main de la ventana FuncionarioView donde comentamos la lnea de codigo
y agregamos el titulo de la ventana.

Vista de las lneas de codigo agregadas al main de la ventana FuncionarioView.

Miguel Angel Recalde. Pgina 239


Ingeniera del Software II Gua de Programacin

Ahora vamos a agregar un registro de funcionario para ello hacemos correr nuestra aplicacin,
luego elegimos el men Registros y dentro de ella al tem de men Funcionarios.

Vista de los pasos a seguir para ejecutar el tem de men Funcionarios.

Esta accin llama a la ventana Registro de Funcionarios donde completamos los datos del
funcionario que necesitamos guardar, luego presionamos el botn Guardar.

Vista de la ventana Registro de Funcionarios.

Miguel Angel Recalde. Pgina 240


Ingeniera del Software II Gua de Programacin

Ahora observemos los datos desde la Base de Datos y efectivamente ya tenemos all los datos
que acabamos de completar.

Vista de los datos almacenados en la tabla funcionario.

Ahora nos vamos nuevamente al bean del codigo de DetPresupuesto y completamos los
cdigos que faltan.
private Funcionario codFuncionario;

Vista de las lneas agregadas al codigo del archivo CabPresupuesto.

Miguel Angel Recalde. Pgina 241


Ingeniera del Software II Gua de Programacin

Luego reparamos las importaciones, ahora nos vamos a comentar los mtodos gets y sets de
funcionario, luego sobrescribimos esos mtodos.
public Funcionario getCodFuncionario() {

return codFuncionario;

public void setCodFuncionario(Funcionario codFuncionario) {

Funcionario oldCodFuncionario = this.codFuncionario;

this.codFuncionario = codFuncionario;

changeSupport.firePropertyChange("codFuncionario", oldCodFuncionario, codFuncionario);

Vista de las lneas agregadas al codigo del archivo CabPresupuesto.

Ahora nos vamos nuevamente para nuestra ventana de Presupuesto, seleccin la lista
desplegable del Funcionario, hacemos clic derecho sobre ella y elegimos las opciones Enlazar =>
elements.

Miguel Angel Recalde. Pgina 242


Ingeniera del Software II Gua de Programacin

Vista de las lneas agregadas al codigo del archivo CabPresupuesto.

Esta accin nos lleva a la ventana Enlace donde seleccionamos el botn Importar datos del
formulario, esta accin hace que aparezca la ventana Importar datos al formulario donde
tenemos que definir la Conexin con la Base de datos y la Tabla de base de datos que para este
caso sera Funcionario.

Vista de la ventana Importar datos del formulario.

Miguel Angel Recalde. Pgina 243


Ingeniera del Software II Gua de Programacin

Presionamos el botn Aceptar y en este punto Netbeans nos crea una lista de funcionarios al
que llama funcionarioList, luego presionamos el botn Aceptar.

Vista de la ventana Enlace del JComboBox.

Ahora tenemos que vincular nuestra lista desplegable con el Item seleccionado, para ello lo
seleccionamos nuevamente, hacemos clic derecho sobre ella y elegimos las opciones Enlazar =>
selectedItem.

Vista de los pasos a seguir para enlazar un campo de texto a un elemento seleccionado.

Miguel Angel Recalde. Pgina 244


Ingeniera del Software II Gua de Programacin

Esta nos lleva a la ventana Enlace donde en la opcin Enlazado de fuente elegimos masterTable
y en Enlazado de expresin apuntamos a nuestro codFuncionario, luego presionamos el botn
Aceptar.

Vista de la ventana Enlace.

Ahora continuando con nuestros enlaces hacemos lo mismo hacemos con la fecha, para ello
seleccionamos el campo de texto Fecha, hacemos clic derecho sobre ella y elegimos las
opciones Enlazar => text.

Vista de los pasos a seguir para enlazar un campo de texto a un texto.

Miguel Angel Recalde. Pgina 245


Ingeniera del Software II Gua de Programacin

Esto nos lleva a la ventana de Enlace donde en Enlazado de fuente seleccionamos masterTable
y en Enlazado de la expresin seleccionamos la fecha (fchPresCab), luego presionamos el botn
Aceptar.

Vista de la ventana Enlace.

Por ltimo vamos a enlazar nuestro campo de texto Total General para ello lo seleccionamos,
hacemos clic derecho sobre ella y elegimos nuevamente Enlazar => text.

Vista de los pasos a seguir para enlazar un campo de texto a un texto.

Miguel Angel Recalde. Pgina 246


Ingeniera del Software II Gua de Programacin

En la ventana Enlace seleccionamos nuevamente masterTable en Enlazado de fuente y en


Enlazado de expresin elegimos el valor del presupuesto (vlrPresuCab), luego presionamos el
botn Aceptar.

Vista de la ventana Enlace.

Ahora ya tenemos todos los campos vinculados entonces vamos a ejecutar nuestro proyecto,
para ello nos vamos a nuestro men Movimiento y dentro de ella elegimos el tem de men
Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto

Miguel Angel Recalde. Pgina 247


Ingeniera del Software II Gua de Programacin

Esto nos lleva a la ventana Movimiento Registro de Presupuesto.

Vista de la ventana Movimiento Registro de Presupuesto.

Observamos que en Funcionario no nos trae ningn valor en nuestra lista desplegable, luego
presionamos el botn Nuevo Presupuesto y en la cabecera completamos los datos del
presupuesto, luego presionamos el botn Agregar Item para completar los datos del detalle,
ahora a presionar el botn Guardar observamos que nos lanza una Excepcin.

Miguel Angel Recalde. Pgina 248


Ingeniera del Software II Gua de Programacin

Vista de la excepcin lanzada en la pestaa sysvent (run).

All podemos observar que nos da un ClassCastException eso es porque estamos vinculando un
text a una fecha, pero tambin podemos observar en la cabecera que el codigo ya fue asignado
y es 3, para ver los datos en la Base de Datos, comenzamos con la tabla cab_presupuesto.

Miguel Angel Recalde. Pgina 249


Ingeniera del Software II Gua de Programacin

Vista de los datos almacenados en la tabla cab_presupuesto.

Luego observamos los datos guardados en la tabla det_presupuesto..

Vista de los datos almacenados en la tabla det_presupuesto.

Por el momento esta guardando los datos dentro de la base de datos, ahora vamos a hacer que
aparezcan los datos del funcionario dentro de la Lista Desplegable.

Miguel Angel Recalde. Pgina 250


Ingeniera del Software II Gua de Programacin

Esta lista de funcionario no se esta renderizando aqu correctamente, porque aparece el camino
completo, que es lo que est pasando ac??

Vista de los datos mostrados en la lista desplegable Funcionario.

Eso pasa porque no se esta renderizando correctamente, para ello vamos a crear un renderer,
entonces vamos a crear un nuevo paquete al que llamaremos py.com.systvent.renderizar.

Vista de los pasos a seguir para agregar un nuevo paquete.

Miguel Angel Recalde. Pgina 251


Ingeniera del Software II Gua de Programacin

En la ventana Nuevo Paquete Java completamos el nombre del paquete y presionamos el botn
Terminar.

Vista del paso 2 Nombre y ubicacin de la ventana Nuevo Paquete Java.

Luego dentro de este paquete vamos a crear un nuevo archivo java ello nos posicionamos sobre
el nombre del paquete, hacemos clic derecho sobre ella y elegimos las opciones Nuevo => Clase
Java.

Vista de los pasos a seguir para agregar una nueva Clase Java.

Miguel Angel Recalde. Pgina 252


Ingeniera del Software II Gua de Programacin

A esta clase lo vamos a llamar FuncionarioListRenderizar, completamos el nombre de la clase y


presionamos el botn Terminar.

Vista del paso 2 Nombre y ubicacin de la ventana Nuevo Clase Java.

Luego agregamos las siguientes lneas de codigo dentro de nuestra clase:


public class FuncionarioListRenderizar extends DefaultListCellRenderer{

@Override

public Component getListCellRendererComponent(

JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

if (value instanceof Funcionario) //Si el valor es una instancia de Funcionario

Funcionario f = (Funcionario) value;//asigno el valor del funcionario

setText(f.getNombreFuncionario());//asignamos en nuestro caso el valor de la descripcin de la unidad

return this;

Miguel Angel Recalde. Pgina 253


Ingeniera del Software II Gua de Programacin

No debemos olvidar en importar todos paquetes que hacen falta, esa opcin ya la hemos visto
como podemos conseguirla.

Vista del nuevo archivo creado dentro del paquete py.com.systvent.renderizar.

Despus de crear el archivo lo selecciono luego lo arrastramos y lo lanzamos fuera del form en
la parte blanca no sobre el formulario (esto es muy importante) y as lo usamos como un bean.

Miguel Angel Recalde. Pgina 254


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para utilizar el archivo creado como un bean .

Ahora podemos observar en el Inspector el nuevo componente bean agregado.

Vista del nuevo bean agregado dentro del Inspector.

Miguel Angel Recalde. Pgina 255


Ingeniera del Software II Gua de Programacin

Ahora el siguiente paso a seguir es renderizar esta lista desplegable con el archivo que
acabamos de crear, para ello nos vamos en las propiedades de la lista desplegable Funcionario,
all vamos a encontrar la propiedad renderer donde seleccionamos nuestro
funcionarioListRenderizar1.

Vista de la propiedad renderer del JComboBox.

Luego tenemos que realizar un cambio en nuestro JTable de la cabecera para ello lo
seleccionamos, hacemos clic derecho sobre ella y elegimos la opcin Contenido de la tabla.

Miguel Angel Recalde. Pgina 256


Ingeniera del Software II Gua de Programacin

Vista de los pasos seguir para acceder al Contenido de la tabla.

En la columna Funcionario hacemos que apunte a ${codFuncionario.nombreFuncionario}, y all


debemos de asegurarnos que el Tipo sea String.

Vista de las columnas de la ventana Personalizar Dialogo.

Miguel Angel Recalde. Pgina 257


Ingeniera del Software II Gua de Programacin

Ahora ejecutamos nuevamente nuestra aplicacin para ver cmo van los cambios para ello en la
ventana Sistema de Ventas elegimos el men Movimiento y dentro de ella el tem de men
Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Esta accin nos lleva a la ventana Movimiento Registro de Presupuesto donde ya podemos
observar el nombre del funcionario dentro de nuestra lista desplegable.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 258


Ingeniera del Software II Gua de Programacin

Ahora vamos a tratar la excepcin que nos dio con nuestra fecha, vamos a agregar desde la
Paleta un componente del tipo Cuadro Formateado.

Vista de los pasos a seguir para agregar un componente Cuadro formateado.

Ahora eliminamos el campo de texto que tenamos en la fecha y colocamos en su lugar nuestro
Cuadro formateado, ahora vamos a enlazarlo para ello lo seleccionamos y elegimos las opciones
Enlazar => value.

Vista de los pasos a seguir para enlazar un Cuadro formateado a un valor.

Miguel Angel Recalde. Pgina 259


Ingeniera del Software II Gua de Programacin

Esta accin hace que aparezca la ventana Enlace donde seleccionamos en Enlazado de fuente
nuestro masterTable y en Enlazado de expresin nuestra fecha de presupuesto (fchPresCab),
luego presionamos el botn Aceptar.

Vista de la ventana Enlace.

Ahora ya podemos observar en la pestaa Enlace el valor del enlace.

Vista de la propiedad value del cuadro formateado.

Miguel Angel Recalde. Pgina 260


Ingeniera del Software II Gua de Programacin

Ahora vamos a probar si nos da la excepcin, para ello vamos a ejecutar nuevamente nuestro
programa, para ello en la ventana Sistema de Ventas elegimos el men Movimiento y dentro
de ella el tem de men Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

En la ventana Movimiento Registro de Presupuesto presionamos el botn Nuevo


Presupuesto y en la cabecera completamos los datos.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 261


Ingeniera del Software II Gua de Programacin

Luego presionamos el botn Agregar Item donde completamos todos los datos en el detalle,
luego presionamos el botn Guardar.

Vista de la ventana Movimiento Registro de Presupuesto con todos los datos cargados.

Ahora nos vamos del lado de Base de Datos y observamos los datos guardados en la tabla
cab_presupuesto donde podemos observar que la fecha ya fue almacenada.

Vista de los datos almacenados en la tabla cab_presupuesto.

Miguel Angel Recalde. Pgina 262


Ingeniera del Software II Gua de Programacin

Luego observamos los datos guardados en la tabla det_presupuesto donde podemos observar
que los datos fueron almacenados sin ningn inconveniente.

Vista de los datos almacenados en la tabla det_presupuesto.

Ahora vamos a hacer lo siguiente, al hacer clic en el botn Nuevo Presupuesto el foco tiene que
aparecer en el Codigo del Cliente y que tambin deshabilite el codigo del Presupuesto.

Entonces primero vamos a ver como se llama nuestro campo de texto para despus utilizarlo en
el codigo del botn Nuevo Presupuesto, para ello nos posicionamos sobre el campo de texto del
Cliente hacemos clic derecho sobre ella y elegimos la opcin Cambiar nombre de la variable.

Miguel Angel Recalde. Pgina 263


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para Cambiar el nombre a una variable.

Para nuestro ejemplo lo vamos a llamar tfCliente, presionamos el botn Aceptar.

Vista de la ventana Cambiar de nombre.

Miguel Angel Recalde. Pgina 264


Ingeniera del Software II Gua de Programacin

Seguimos los mismos pasos para cambiar el nombre de nuestra variable para el codigo del
presupuesto, para nuestro ejemplo lo vamos a llamar tfCodCabecera, luego presionamos el
botn Aceptar.

Vista de la ventana Cambiar de nombre.

Una vez que ya cambiamos el nombre a nuestras variables vamos a agregarle esta funcionalidad
a nuestro evento, para ello nos posicionamos sobre nuestro botn Nuevo Presupuesto,
hacemos clic derecho sobre ella y elegimos las opciones Eventos => Action => actionPerformed,
esta accin nos lleva a la fuente del evento.

Miguel Angel Recalde. Pgina 265


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar un evento al botn Nuevo Presupuesto.

Ahora en el codigo agregamos estas dos lneas de codigo, la primera lnea hace que el foco se
ubique en el codigo del cliente y la segunda lnea hace que el codigo del presupuesto este
deshabilitado.
tfCliente.requestFocus();

tfCodCabecera.setEnabled(false);

Vista de las dos lneas de cdigos agregadas al evento del botn Nuevo Presupuesto.

Miguel Angel Recalde. Pgina 266


Ingeniera del Software II Gua de Programacin

Vamos a comprobar si esto esta funcionando para ello ejecutamos nuevamente nuestra
aplicacin, en el men Movimientos elegimos el tem de men Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Ahora al presionar el botn Nuevo Presupuesto podemos notar que el codigo ya esta
deshabilitado y que el foco se encuentra en el codigo del cliente

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 267


Ingeniera del Software II Gua de Programacin

Genial vamos bien!!! ahora que ya tenemos prcticamente todo funcionando en la cabecera
vamos a hacer que nuestro JTable no sea visible, recuerden que necesitamos de ella porque
esta vinculada a todos los componentes, entonces para esconderla vamos a seguir los siguientes
pasos:

Seleccionamos nuestra JTable y luego en los puntos que aparecen en la esquina lo reducimos
con el mouse hasta que no sea visible.

Vista de los pasos a seguir para ocultar una JTable.

Ahora nuestra JTable ya no esta visible y podemos acomodar nuestros otros componentes de la
cabera como se observa en el grafico.

Vista de la ventana MovimientoPresupuestoVenta con los nuevos cambios.

Miguel Angel Recalde. Pgina 268


Ingeniera del Software II Gua de Programacin

Ahora vamos a continuar con la funcionalidad de nuestra ventana, ahora la idea es que cuando
se introduzca el codigo del cliente te traiga el nombre del cliente en pantalla, pero como es que
podemos conseguir eso??

Para ello vamos a colocar el codigo en el focusLost y dentro de ese focusLost tenemos que
primero pegar el nombre del cliente y para ello vamos a usar el Bean de cliente, dentro de este
Bean vamos a encontrar una anotacin llamada @NamedQuery, dentro del bean vamos a
encontrar varios @NamedQuery al que le podemos pasar un parmetro pero el query que
vamos a usar nosotros es SELECT c FROM Cliente c WHERE c.codCliente = :codCliente.

Vista de los NamedQuery definidos en dentro del codigo del archivo Cliente.java.

Pero antes de introducir el codigo tenemos que crear una consulta al que llamaremos
clienteQuery, para crear esta consulta debemos seguir los siguientes pasos:

Primero elegimos una consulta y la agregamos a nuestra ventana, esta opcin ya la vimos
anteriormente.

Miguel Angel Recalde. Pgina 269


Ingeniera del Software II Gua de Programacin

Vista de la Consulta agregada a la ventana MovimientoPresupuestoVenta.

Ahora nos vamos al Inspector y en las propiedades de nuestro query en la pestaa Codigo le
cambiamos el nombre por clienteQuery.

Vista del Nombre de variable dentro de las propiedades del query1.

Luego nos vamos en la pestaa Propiedades y hacemos que apunte al entityManager y en


query le pasamos el query del cliente que es SELECT c FROM Cliente c, luego presionamos el botn
Cerrar.
Miguel Angel Recalde. Pgina 270
Ingeniera del Software II Gua de Programacin

Vista de las propiedades del query dentro de la ventana clienteQuery.

Ahora nos vamos nuevamente a nuestro cdigo fuente del evento FocusLost del campo de texto
tfCliente y agregamos estas lineas de codigo:
clienteQuery = entityManager.createNamedQuery("Cliente.findByCodCliente");//aqui pasamos como parmetro el nombre del Query que esta en
el Bean

clienteQuery.setParameter("codCliente", Integer.parseInt(tfCliente.getText())); //le pasamos el parmetro, en el bean el nombre de parmetro se


llama codCliente

List<Cliente> dato = clienteQuery.getResultList();//Ac estamos usando un recurso llamado generic, definimos una lista de clientes

tfNombreCli.setText(dato.get(0).getNomCliente());

Vista de las lineas de codigo agregadas al evento FocusLost del campo de texto tfCliente.

Miguel Angel Recalde. Pgina 271


Ingeniera del Software II Gua de Programacin

Ahora vamos a probar si lo que hicimos est funcionando, para ello vamos ejecutar nuestro
programa, en la ventana Sistema de Ventas nos vamos al men Movimiento y dentro de ella
elegimos el tem de men Presupuesto.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Ahora estamos nuevamente en nuestra ventana Movimiento Registro de presupuesto, en


Cliente agregamos el cdigo del cliente y al perder el foco observamos que ya aparece el
nombre de nuestro cliente.

Miguel Angel Recalde. Pgina 272


Ingeniera del Software II Gua de Programacin

Vista de la ventana Movimiento Registro de Presupuesto.

Podemos observar que todo marcha sper bien, pero que pasa si colocamos por ejemplo una m
en lugar de un numero?? Veamos que sucede, para ello vamos a ejecutar nuevamente nuestro
sistema, repetimos los pasos vistos anteriormente y en la ventana Movimiento Registro de
Presupuesto escribimos la letra m.

Vista de la ventana Movimiento Registro de Presupuesto.

Miguel Angel Recalde. Pgina 273


Ingeniera del Software II Gua de Programacin

Entonces en este punto nos damos cuenta que nos esta mostrando una excepcin del tipo
NumberFormatException.

Entonces en este punto es recomendable saber cules son los tipos de excepciones que pueden
ocurrir y atacarlos uno por uno de la mas especifica a la mas genrica, entonces vamos a
agregarle un try y un catch para tratar esta excepcin, entonces nuestro cdigo ahora quedara
de esta manera.

private void tfClienteFocusLost(java.awt.event.FocusEvent evt) {

// ......

try{

clienteQuery = entityManager.createNamedQuery("Cliente.findByCodCliente");//aqui pasamos como parmetro el nombre del Query que


esta en el Bean

clienteQuery.setParameter("codCliente", Integer.parseInt(tfCliente.getText())); //le pasamos el parmetro, en el bean el nombre de parmetro


se llama codCliente

List<Cliente> dato = clienteQuery.getResultList();//Ac estamos usando un recurso llamado generic, definimos una lista de clientes

tfNombreCli.setText(dato.get(0).getNomCliente());//tfNombreCli es el campo de texto donde tiene que aparecer el nombre

catch(Exception e)

JOptionPane.showMessageDialog(null, "Ocurri un error");

e.printStackTrace();

Miguel Angel Recalde. Pgina 274


Ingeniera del Software II Gua de Programacin

Vista de la modificacion al codigo del evento FocusLost del campo de texto tfCliente.

Ahora vamos a correr nuevamente nuestro sistema siguiendo los mismos pasos vistos
anteriormente, y al introducir la letra m el sistema ya nos muestra el mensaje que ocurri un
error.

Vista del mensaje de error lanzado en la ventana Movimiento Registro de Presupuesto.

El otro tipo de error que nos puede dar aqu es cuando no exista el cdigo del cliente que le
estamos pasando, esa excepcin seria del tipo ArrayIndexOutOfBoundsException.

Miguel Angel Recalde. Pgina 275


Ingeniera del Software II Gua de Programacin

Vista de la excepcin lanzada en la pestaa sysvent (run).

En este punto podemos observar que no existe un cliente con ese cdigo (12), entonces esto
queda como tarea para ustedes el poder tratar esta excepcin.

Ahora vamos a crear nuestra ventana de bsqueda de productos, la idea aqu es crear nuestra
ventana y al presionar el botn Agregar tem llamar a esa ventana, buscamos los datos del
producto y al cerrar esa ventana que esos datos se inserten en el detalle con todos los datos del
producto.

Entonces para este ejemplo vamos a crear primero un paquete al que llamaremos
py.com.systvent.busqueda y luego dentro de este paquete vamos a crear nuestra ventana
JDialog, para ello nos posicionamos sobre el nombre de nuestro paquete, hacemos clic derecho
sobre ella y elegimos las opciones Nuevo => Formulario JDialog.

Miguel Angel Recalde. Pgina 276


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para crear un Formulario JDialog.

En la ventana Nuevo Formulario JDialog le damos el nombre a nuestra ventana, para nuestro
ejemplo lo vamos a llamar BuscarProducto.

Vista del paso 2 Nombre y ubicacin de la ventana Nuevo Formulario JDialog.

Miguel Angel Recalde. Pgina 277


Ingeniera del Software II Gua de Programacin

Ahora podemos observar nuestra ventana, vamos a poner el gestor de distribucin en Diseo
Absoluto y luego le vamos a agregar una tabla.

Vista de la ventana JDialog con la Tabla agregada.

Luego le agregamos una etiqueta, un campo de texto y un botn a nuestra ventana.

Vista de la ventana Buscar Producto con los objetos agregados.

Miguel Angel Recalde. Pgina 278


Ingeniera del Software II Gua de Programacin

Ahora vamos a enlazar los elementos con la tabla para ello seleccionamos nuestra tabla,
hacemos clic derecho sobre ella y elegimos las opciones Enlazar => elements.

Vista de los pasos a seguir para enlazar una Tabla a sus elementos.

Elegimos el botn Importar datos al formulario, seleccionamos la Conexin con la base de


datos y la Tabla de la base de datos que nuestro caso es producto, en este momento el
automticamente el est creando un EntityManager, un JQuery y una lista (list), luego hacemos
clic en el botn Aceptar.

Miguel Angel Recalde. Pgina 279


Ingeniera del Software II Gua de Programacin

Vista de la ventana Importar datos al formulario.

Nuevamente en la ventana Enlace jTable1 dejamos todo como esta y damos clic en el botn
Aceptar.

Vista de la ventana Enlace con el Enlazado de fuente definido.

Miguel Angel Recalde. Pgina 280


Ingeniera del Software II Gua de Programacin

Cambiamos en sus propiedades del JTable la opcin el autoResizeMode a OFF.

Vista de las propiedades de la Tabla dentro de la ventana jTable1.

Ahora lo que tenemos que hacer es que esa Tabla apunte a un bean en la memoria, que en este
caso sera el bean de MovimmientoPresupuestoVenta, en este punto nosotros vamos a usar el
mismo bean y la misma direccin de memoria.

Ahora nos vamos al Inspector, seleccionamos nuestro productoList y en sus Propiedades


seleccionamos Observable porque l esta apuntando a ese productoQuery.

Vista de las propiedades del componente productoList.

Miguel Angel Recalde. Pgina 281


Ingeniera del Software II Gua de Programacin

En las propiedades en de la pestaa Codigo nos aseguramos que este apuntando al bean del
producto.

Vista de las propiedades del componente productoList.

Ahora nos vamos al productoQuery y simplemente nos aseguramos que todo all este bien, no
cambiamos nada en sus propiedades.

Vista de las propiedades del componente productoQuery.

Miguel Angel Recalde. Pgina 282


Ingeniera del Software II Gua de Programacin

Luego vamos a las propiedades del entityManager, all en la pestaa Cdigo en Nombre de la
variable lo vamos a cambiar por entityManager, en la figura muestra el Nombre de la variable
antes del cambio.

Vista de las propiedades del componente sistventPUEntityManager antes del cambio de Nombre de Variable.

Ahora podemos apreciar el grafico el cambio que realizamos.

Vista de las propiedades del componente entityManager despus del cambio de Nombre de Variable.

Miguel Angel Recalde. Pgina 283


Ingeniera del Software II Gua de Programacin

Ahora vamos a implementar una bsqueda de productos, para ello creamos un nuevo paquete
al que llamaremos py.com.systvent.convertir.

Vista del paso 2 Nombre y ubicacin para la creacin del nuevo paquete.

Ahora dentro de este paquete vamos a agregar un archivo que nos va a ayudar para realizar un
filtro en nuestra bsqueda, para ello nos posicionamos sobre nuestro paquete hacemos clic
derecho sobre ella y elegimos las siguientes opciones Nuevo => Clase Java.

Vista de los pasos a seguir para la creacin de un nuevo Paquete Java.

Miguel Angel Recalde. Pgina 284


Ingeniera del Software II Gua de Programacin

Esta accin nos lleva a la ventana de creacin de nuevo Clase Java donde le asignamos el
nombre de OrdFilaConvString, luego dentro de este archivo pegamos los siguientes cdigos:
package py.com.systvent.convertir;

import javax.swing.JTable;

import javax.swing.RowFilter;

import javax.swing.table.TableRowSorter;

import org.jdesktop.beansbinding.Converter;

/**

* @author Miguel Recalde

*/

public class OrdFilaConvString extends Converter{

private JTable table;

public JTable getTable()

return table;

public void setTable(JTable table)

this.table = table;

@Override

public Object convertReverse(Object mask)

TableRowSorter sorter = new TableRowSorter(table.getModel());

//El siguiente cdigo hace que el filtro sea case sensitive y si queremos //que sea case sensitive, solo hay que descomentar las lneas

//sorter.setRowFilter(RowFilter.regexFilter(".*" + mask + ".*"));

String m = mask.toString();

StringBuilder sb = new StringBuilder();

for (int i = 0; i< m.length();i++)

Miguel Angel Recalde. Pgina 285


Ingeniera del Software II Gua de Programacin
{

char c = m.charAt(i);

sb.append('[').append(Character.toLowerCase(c)).append(Character.toUpperCase(c)).append(']');

sorter.setRowFilter(RowFilter.regexFilter(".*" + sb + ".*"));

return sorter;

@Override

public Object convertForward(Object value) {

throw new UnsupportedOperationException("No encontrado.");

Vista de los cdigos del archivo OrdFilaConvString.

Miguel Angel Recalde. Pgina 286


Ingeniera del Software II Gua de Programacin

Ahora vamos lanzar nuestro converter sobre la JDialog y lo vamos a usar como un Bean, para
ello seleccionamos nuestro archivo OrdFilaConvString, lo arrastramos y lo soltamos sobre
nuestra ventana JDialog.

Vista del archivo OrdFilaConvString a ser usado como un bean.

Ahora si nos vamos al Inspector lo vamos a poder visualizar, ahora en sus Propiedades lo
tenemos que vincular con nuestra Table1, luego presionamos el botn Cerrar.

Miguel Angel Recalde. Pgina 287


Ingeniera del Software II Gua de Programacin

Vista de la vinculacin entre el archivo ordFilaConvString1 con la jTable1.

Ahora tenemos que enlazar nuestro campo texto para ello lo seleccionamos, hacemos clic
derecho sobre ella y elegimos las opciones Enlazar => text.

Vista de la ventana Movimiento Registro de Presupuesto.

Ahora en la ventana Enlace en Enlazado de la fuente lo vinculamos con el JTable1 y en Enlazado


de expresin seleccionamos la expresin que es rowSorter.

Miguel Angel Recalde. Pgina 288


Ingeniera del Software II Gua de Programacin

Vista de la ventana Enlace del jTextField1.

Luego en la pestaa Avanzado de la ventana Enlace en la opcin Convertidor tenemos que


apuntar a nuestro archivo bean ordFilaConvString1 con esto nos aseguramos que al introducir
una letra, numero, etc., ella har la bsqueda de las coincidencias y luego lo va a ordenar y
filtrar dentro de la tabla, presionamos el botn Aceptar.

Vista de la pestaa Avanzado de la ventana Enlace del jTextField1.

Miguel Angel Recalde. Pgina 289


Ingeniera del Software II Gua de Programacin

Muy bien ahora que ya tenemos creada nuestra ventana de bsqueda recordamos nuevamente
cual es la idea en este punto, nosotros al presionar el botn Agregar Item ella tiene que llamar a
nuestra ventana de bsqueda, luego en la ventana tenemos que buscar el Producto, lo
seleccionamos y luego lo importamos, al presionar el botn Importar ella debe cerrarse y enviar
los datos del producto al detalle.

Ahora el cdigo del botn Agregar Item lo podemos hacer es pasarle el bean que tambin va a
ser usado por la ventana de bsqueda ya que ambos van a estar apuntando a la misma
direccin de memoria.

Para ello nos vamos a la ventana MovimientoPresupuestoVenta y en la fuente aremos los


cambios necesarios, veamos los cambios pasos a paso, primero comentamos la lnea donde se
asigna el codigo del producto, luego agregamos estas tres lneas de codigo.
BuscarProducto bp = new BuscarProducto(null,true);

bp.recibeObjeto(d);//antes de hacer visible le paso en recibeObjeto() el valor de d

bp.setVisible(true);

Vista de los cdigos agregados al evento newDetail de la ventana MovimientoPresupuestoVenta.

Miguel Angel Recalde. Pgina 290


Ingeniera del Software II Gua de Programacin

Como podemos observar en la lnea 342 declaramos un mtodo llamado recibeObjeto al cual le
pasamos como parmetro el objeto d que nos est dando un error, eso es porque todava no
definimos ese mtodos en la ventana BuscarProducto pero lo vamos a hacer ahora.

Entonces nos vamos a la ventana BuscarProducto y aqu vamos a crear una variable privada del
tipo DetPresupuesto, esto nos va a pedir reparar la importacin porque DetPresupuesto se
encuentra en otro paquete, a importarlo desaparece ese error.

Luego vamos a crear un mtodo Set al que llamaremos recibeObjeto, en este caso va a recibir
un Objeto de tipo DetPresupuesto, el mtodo es de tipo void porque no va a retornar nada.
private DetPresupuesto d;//se hace el import necesario

public void recibeObjeto(DetPresupuesto d)//este mtodo recibe un objeto de tipo DetPresupuesto, este mtodo lo puedo sobrecargar cuando
quiera usar esta ventana con otro formulario y java no tendr problema alguno

this.d = d;//en este punto tanto MovimientoPresupuestoVenta como BuscarProducto estn apuntando al mismo d de la memoria

Vista del mtodo agregado a la fuente de la ventana BuscarProducto.

Miguel Angel Recalde. Pgina 291


Ingeniera del Software II Gua de Programacin

Ahora vamos a cambiar algunos campos de lugar para poder visualizar los datos de una forma
mas ordenada en nuestra ventana de bsqueda para ello nos vamos el modo diseo, nos
posicionamos sobre nuestra Tabla, hacemos clic derecho y elegimos la opcin Contenido de la
tabla.

Vista de los pasos a seguir para acceder al Contenido de la tabla.

Esta accin nos lleva a la ventana de Personalizar cdigo donde podemos cambiar la posicin
del Ttulo, su Expresin, el tamao, etc.

Vista de la ventana Personalizar Dialogo.

Miguel Angel Recalde. Pgina 292


Ingeniera del Software II Gua de Programacin

Al presionar el botn Cerrar ya podemos apreciar los cambios que hicimos a nuestra ventana.

Vista de la ventana Productos con los cambios realizados.

Antes de continuar vamos a cambiarle el nombre a nuestro JTable, para ello lo seleccionamos,
hacemos clic derecho sobre ella y elegimos la opcin Cambiar nombre de variable.

Vista de los pasos a seguir para cambiar el nombre a una variable.

Miguel Angel Recalde. Pgina 293


Ingeniera del Software II Gua de Programacin

Luego aparece la ventana Cambiar de nombre donde cambiamos el nombre de nuestra variable
por jtProducto.

Vista de la ventana Cambiar de nombre con el Nuevo nombre asignado.

Ahora vamos a agregarle un evento a nuestro botn Importar, para ello nos posicionamos sobre
ella, hacemos clic derecho y elegimos las opciones Eventos => Action => actionPerformed.

Vista de los pasos a seguir para agregar un evento al botn Importar.

Miguel Angel Recalde. Pgina 294


Ingeniera del Software II Gua de Programacin

Dentro de este evento vamos a agregarle las siguientes lneas de cdigos:


this.d.setVlrUnitPresuDet((Double)jtProducto.getValueAt(jtProducto.getSelectedRow() ,2));//el 2 corresponde al campo 2 de la linea seleccionada
que Precio de Venta

this.d.getDetPresupuestoPK().setCodProducto((String)jtProducto.getValueAt(jtProducto.getSelectedRow() ,0));

this.dispose();//una vez asignado los valores tenemos que cerrar el formulario

Vista de los cdigos agregados al evento de botn Importar.

Ahora nos vamos a la fuente de nuestro MovimientoPresupuestoVenta y alli hacemos el


siguiente cambio de cdigo, vamos a cambiar de posicion d.setCabPresupuesto(c);, esta lnea de
cdigo tenemos usarlo antes de persistir nuestro objeto d.

Vista de la lnea de cdigo antes de cambiar de posicin.

Miguel Angel Recalde. Pgina 295


Ingeniera del Software II Gua de Programacin

Vista de la lnea de cdigo despus de cambiar de posicin.

Ahora vamos a probar nuestro avance para comprobar que todo marcha como queremos para
ello hacemos correr nuestra aplicacin.

Vista de l os pasos a seguir para ejecutar el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 296


Ingeniera del Software II Gua de Programacin

Presionamos el botn Nuevo Presupuesto y completamos los datos de la cabecera, luego presionamos el
botn Agregar Item.

Vista de la ventana Movimiento Registro de Presupuesto.

Al presionar el botn Agregar Item ella llama a la ventana Buscar Productos, dentro de la lista
seleccionamos uno por ejemplo Memoria Ram, luego presionamos el botn Importar.

Vista de la ventana Buscar Producto.

Miguel Angel Recalde. Pgina 297


Ingeniera del Software II Gua de Programacin

Ahora podemos observar que se cerr la ventana Buscar Productos y que nuestro producto seleccionado
ya aparecen en el detalle de la ventana Movimiento Registro de Presupuesto, luego presionamos el
botn Guardar.

Vista de la ventana Movimiento Registro de Presupuesto con el producto importado.

No nos lanzo ninguna excepcin asi que ahora nos vamos a nuestra Base de Datos para comprobar que
los datos ya fueron guardados, comenzamos con nuestra tabla cab_presupuesto.

Vista de los datos almacenados en la tabla cab_presupuesto.

Ahora comprobamos los datos de nuestra tabla det_presupuesto.

Miguel Angel Recalde. Pgina 298


Ingeniera del Software II Gua de Programacin

Vista de los datos almacenados en la tabla det_presupuesto.

Ok por el momento vamos bien ya nos trae el cdigo del producto y su precio de venta ahora lo que
tenemos que conseguir es traer esa descripcin de producto en el detalle, asignarle una cantidad y que
nos calcule nuestro Valor Total y nuestro Total General.

Vamos a comenzar por la descripcin del producto en el archivo bean DetPresupuesto, para eso vamos
a hacer lo siguiente, nos vamos a DetPresupuesto y vamos a crear una nueva propiedad aqu.

Vista del archivo bean DetPresupuesto.

Miguel Angel Recalde. Pgina 299


Ingeniera del Software II Gua de Programacin

Esa propiedad va a ser del tipo private y lo llamaremos descripcionProducto.

Como la tabla no tiene descripcin del producto nosotros creamos ese campo all, con la anotation
@Transient le decimos a JPA que no va a persistir ese campo, tambin tenemos que crear los gets y sets
para esta nueva propiedad, entonces dentro del bean agregamos estas lneas de cdigo:

@Transient //tengo una anotacion llamada @Trasient, esto informa que la propiedad no es persistente, esto significa que la descripcion del
producto no sera persistente

//nueva propiedad agregada

private String descripcionProducto;//JPA va a pedir agregar un get y un set y tambien va a querer persistir en una BD, pero la anotacion
@Transient le indica que eso no es necesario

public void setDescripcionProducto(String d)

this.descripcionProducto = d;

public String getDescripcionProducto()

return this.descripcionProducto;

Vista de las lineas de codigos agregadas al archivo bean DetPresupuesto.

Miguel Angel Recalde. Pgina 300


Ingeniera del Software II Gua de Programacin

Entonces lo que hicimos ac es agregar una descripcin del producto al detalle de la venta ya que no
tenemos esa descripcin all, luego con la anotacin @Transient le indicamos que ella no va a ser
guardada en la Base de Datos.

Para poder traer esos valores de la ventana de busqueda a mi detalle yo tengo que usar un query, ese
query lo vamos a encontrar en el archivo bean Producto.java Producto.findAll", query = "SELECT p FROM
Producto p"

Vista de los @NamedQuery definidos en el archivo bean Producto.

Esta parte es muy parecida a lo que hicimos con cliente en el archivo MovimientoPresupuesto.java en el
evento focusLost.

Miguel Angel Recalde. Pgina 301


Ingeniera del Software II Gua de Programacin

Vista de las lneas de cdigos a copiar del evento tfClienteFocusLost.

Para conseguir esta funcionalidad nos vamos a la Paleta y en Persistencia de Java elegimos la opcin
Consulta, la seleccionamos y luego la arrastramos sobre nuestra ventana MovimientoPresupuestoVenta

Vista de la consulta agregada a la ventana MovimientoPresupuestoJava

Miguel Angel Recalde. Pgina 302


Ingeniera del Software II Gua de Programacin

Ahora nos vamos al Inspector y el nombre de esa consulta es query1 y vamos ahora en sus propiedades,
en entityManager le asignamos entityManager y en query SELECT p FROM PRODUCTO p.

Vista de los cambios a realizar en las Propiedades de componente query1 dentro de la ventana query1.

Tambin en la pestaa Cdigo vamos a cambiar el nombre de variable por productoQuery.

Vista de los cambios a realizar en las Propiedades de componente query1 dentro de la ventana query1.

Miguel Angel Recalde. Pgina 303


Ingeniera del Software II Gua de Programacin

Hecho esto nosotros nos vamos al cdigo del MovimientoPresupuestoVenta en el lostFocus, copiamos
ese ese cdigo para despus pegar los y hacerle los cambios necesarios.

Vista de las lneas de cdigos a copiar del evento tfClienteFocusLost.

Y lo pegamos en el evento newDetail antes de persistir nuestro entityManager.

Vista de las lneas de cdigos a copiados dentro del evento del botn newDetail.

Miguel Angel Recalde. Pgina 304


Ingeniera del Software II Gua de Programacin

Y ahora hacemos los cambios necesarios en el cdigo, al final estas serian las lneas de cdigos agregadas

productoQuery = entityManager.createNamedQuery("Producto.findByCodProducto");

productoQuery.setParameter("codProducto", d.getDetPresupuestoPK().getCodProducto());

List<Producto> dato = productoQuery.getResultList();//Esta lista solo va a retornar un producto

d.setDescripcionProducto(dato.get(0).getDescProducto());

Vista de las lneas de cdigos modificados dentro del evento.

Bien una vez que tengamos todos listo lo que tenemos que hacer es volver al diseo, seleccionamos la
tabla, hacemos clic derecho sobre ella y elegimos el Contenido de la tabla.

Miguel Angel Recalde. Pgina 305


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar Contenido de la tabla.

Ahora en la pestaa Columnas vamos a insertar la Descripcin del Producto, para ello presionamos el
botn Insertar, esto hace que aparezca una nueva fila al que le agregamos la descripcin, para ello en
Titulo agregamos Descripcin del Producto y en Expresin seleccionamos descripcionProducto.

Vista de la nueva columna agregada dentro de la ventana Personalizar Dialogo.

Ahora vamos a subir esta descripcin debajo del cdigo del producto, tambin le vamos a asigna un
ancho de 150.
Miguel Angel Recalde. Pgina 306
Ingeniera del Software II Gua de Programacin

Vista de los cambios agregados a la ventana Personalizar Dialogo.

Ahora vamos a comprobar que todo marcha segn queremos, para ello vamos a ejecutar nuestra
aplicacin para ello seguimos los mismos pasos de siempre.

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

Miguel Angel Recalde. Pgina 307


Ingeniera del Software II Gua de Programacin

En la ventana Movimiento Registro de Presupuesto presionamos el botn Nuevo Presupuesto donde


agregamos los valores en la cabecera, luego presionamos el botn Agregar Item.

Vista de la ventana Movimiento Registro de Presupuesto.

Ahora ya podemos observar nuestra ventana Buscar Productos con la lista de productos que tenemos
guardados en nuestra Base de Datos.

Vista de la ventana Buscar Productos.

Vamos a probar si funciona nuestro filtro para ello escribimos las letras mo en el campo de texto y
podemos observar que nos filtra dos filas cuyos nombre de productos coinciden con este filtro.

Miguel Angel Recalde. Pgina 308


Ingeniera del Software II Gua de Programacin

Vista de la ventana Buscar Productos utilizando el filtro de bsqueda con las letras mo.

Al presionar el botn Importar de la ventana Buscar Producto ella se cierra y podemos observar
en la ventana Movimiento Registro de Presupuesto que ya tenemos importado el producto
que seleccionamos.

Vista de la ventana Movimiento Registro de Presupuesto con los datos importados en el detalle.

Presionamos nuevamente el botn Agregar Item y nuevamente escribimos las letras te en el campo de
texto y podemos observar que nos filtra una fila cuyos nombre de productos coincide con este filtro.

Miguel Angel Recalde. Pgina 309


Ingeniera del Software II Gua de Programacin

Vista de la ventana Buscar Productos utilizando el filtro de bsqueda con las letras te.

Nuevamente presionamos el botn Importar y ahora ya podemos observar nuevamente el producto


importado en el detalle.

Vista de la ventana Movimiento Registro de Presupuesto con los datos importados en el detalle.

Ahora nos vamos nuevamente a nuestra Base de Datos para comprobar que los datos que ingresamos se
estn guardando, comenzamos primero con la tabla cab_presupuesto.

Miguel Angel Recalde. Pgina 310


Ingeniera del Software II Gua de Programacin

Vista de los datos almacenados en la tabla cab_presupuesto.

Ahora nos vamos a comprobar en la tabla det_presupuesto, como podemos observar en las dos
tablas aparecen los datos con los que estuvimos trabajando.

Vista de los nuevos datos almacenados en la tabla det_presupuesto.

Ahora lo que vamos a hacer es lo siguiente, permitir que el cliente introduzca la cantidad y el que calcule
su valor.

Miguel Angel Recalde. Pgina 311


Ingeniera del Software II Gua de Programacin

Luego vamos a agregar un nuevo botn y vamos a hacer algunos cambios con respecto a la ubicacin de
los botones, a este botn lo vamos a llamar Calcular Totales, este botn va a tener un mtodo que haga
el clculo, este botn se puede programar para que al presionar F5 por ejemplo ya nos haga el clculo.

Vista de los pasos a seguir para agregar un nuevo botn.

Entonces cuando el usuario haga clic en este botn, l tiene que hacer el clculo del valor de los
productos por la cantidad, despus el va a colocar el total de la lnea y colocarlo en el Total General, eso
es lo que el mtodo necesita hacer, para agregar un evento a nuestro botn Calcular Totales la
seleccionamos, hacemos clic derecho sobre ella y elegimos las opciones Eventos => Action =>
actionPerformed.

Miguel Angel Recalde. Pgina 312


Ingeniera del Software II Gua de Programacin

Vista de los pasos a seguir para agregar un evento a un botn.

Para conseguir esta funcionalidad nosotros tenemos que recorrer todas las filas que se encuentran en
nuestro Detalle, entonces vamos a recorrer la lista de ese JTable que est vinculada, vamos a hacer algo
muy parecido a lo que hicimos con el botn Agregar Item.

Vista del nuevo evento agregado.

Miguel Angel Recalde. Pgina 313


Ingeniera del Software II Gua de Programacin

Ahora le agregamos estas lneas de cdigo:

for ( DetPresupuesto detPresu: ds)// for each, aca el va a pegar todos esos objetos dentro de la coleccin

if(detPresu.getCantPresuDet()== null)//si la cantidad es nula entonces le asigno a cantidad el valor de 1

detPresu.setCantPresuDet(1);//cantidad es igual a 1

//Ahora voy a insertar el valor total de DetPresupuesto

detPresu.setVlrTotalPresuDet(detPresu.getVlrUnitPresuDet() * detPresu.getCantPresuDet());//Valor total = precio unitario * cantidad

valorTotal = valorTotal + detPresu.getVlrTotalPresuDet();//Valor = valor total + total detalle de cada linea

//Aca el total general es igual a valor total

tfTotalGral.setText(String.valueOf(valorTotal));//tfTotalGral es el nombre de la variable Total General de la cabecera

Vista de los cdigos agregados al evento del botn Calcular Totales.

Miguel Angel Recalde. Pgina 314


Ingeniera del Software II Gua de Programacin

OK ahora vamos a probar nuestra aplicacin para comprobar que todo funciona como queremos

Vista de los pasos a seguir para ejecutar el tem de men Presupuesto.

En la ventana Movimiento Registro de Presupuesto presionamos el botn Nuevo Presupuesto luego


completamos los datos de la cabecera, ahora presionamos el botn Agregar Item esto llama a la ventana
Buscar Productos donde seleccionamos el producto de la lista y luego presionamos el botn Importar.

Miguel Angel Recalde. Pgina 315


Ingeniera del Software II Gua de Programacin

Vista de la ventana Buscar Productos.

En el grafico podemos observar que los dos primeros productos tienen asignados sus respectivas
cantidades pero el tercer producto no lo tiene, vamos a presionar ahora el botn Calcular Totales y
veamos que pasa??

Vista de la ventana Movimiento Registro de Presupuesto donde la Cantidad del producto mouse esta vaco.

Miguel Angel Recalde. Pgina 316


Ingeniera del Software II Gua de Programacin

Podemos observar que asigna la cantidad 1 y que ya nos calcul el Valor Total de cada lnea y tambin
que ya nos calcul el Total General de la cabecera.

Vista de la ventana Movimiento Registro de Presupuesto donde la Cantidad del producto mouse ya no est vaco.

Ahora vamos a presionar el botn Guardar, luego nos vamos a nuestra tabla de la Base de Datos para
comprobar que se haya guardado nuestros datos.

Vista de los datos almacenados en la tabla cab_presupuesto.

Miguel Angel Recalde. Pgina 317


Ingeniera del Software II Gua de Programacin

Vista de los datos almacenados en la tabla det_presupuesto.

Miguel Angel Recalde. Pgina 318

S-ar putea să vă placă și