Anda di halaman 1dari 15

Super JAVA SE for Windows with NetBeans IDE - Demo

Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)

Proyecto Biblioteca (Programa 3, Captulo 9)


Disee una aplicacin que permita a una biblioteca tener un control sobre los prstamos de libros. Cada libro tiene los siguientes datos: cdigo, ttulo, autor, editorial, ao de edicin, fecha de devolucin, estado(libre, sala, domicilio). Considere las siguientes opciones de men: Ingresos, Movimientos, Disponibilidad y Listado.

http://www.parainformaticos.com

La opcin de Ingresos
La opcin de Ingresos consiste en registrar los datos considerando lo siguiente: a) El nmero de registro se genera automticamente en forma consecutiva empezando en 1 para el primer libro. b) El cdigo del libro debe tener 5 caracteres alfanumricos c) El ao de edicin puede ser a partir del ao 2000 hasta el ao 2050 d) No se permite el ingreso de cdigos duplicados. e) El estado del libro no se ingresa, pero debe considerarse como libre.

La opcin de Movimientos
La opcin de Movimientos consiste en seleccionar un libro previamente ingresado, mostrar sus datos, y elegir su nuevo estado: Libre, prstamo a Sala, prstamo a Domicilio. Slo si el nuevo estado fuera prstamo a domicilio se solicita fecha de devolucin; en otro caso la fecha de devolucin toma el valor 00/00/00. Para activar esta opcin slo se tiene que hacer clic en la ficha Movimientos como se aprecia a continuacin. Observe que al pasar el mouse sobre sta ficha aparece un texto con borde relacionado al contenido de la opcin.

27/08/2009

Pgina1

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)

http://www.parainformaticos.com

La opcin de Disponibilidad
La opcin de Disponibilidad sirve para consultar los datos de un libro ya ingresado, eligindolo desde un comboBox.

La opcin de Listado
La opcin de Listado muestra todos los libros ingresados y almacenados en el arreglo de objetos, en forma de tabla. Para mostrar la informacin actualizada debe hacer clic en el botn de refrescar tabla.

27/08/2009

Pgina2

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)

http://www.parainformaticos.com

Desarrollo
El cdigo esta compuesto de 9 clases: Libro, Libros, PanelIngresos, PanelMovimientos, PanelDisponibilidad, PanelTabla, PanelListado, PanelPrincipal y Principal. Todas las clases deben estar en el mismo proyecto.

Empecemos entonces creando un nuevo proyecto de nombre Problema03_09, nuevo paquete de nombre problema03. Clic derecho en el paquete creado, elegimos nuevo Java Class de nombre Libro donde escribimos el siguiente cdigo correspondiente a los atributos y a los constructores de la clase. public class Libro{ // datos privados de la clase private String Titulo, Autor, Codigo,Editorial, FechaDev;

private String dia, mes, anio, Estado; private int Edicion;

// constructor vaco public Libro() { }// fin del constructor vaco

// constructor que recibe un objeto Libro public Libro(Libro uno){ setTitulo(uno.getTitulo()); setAutor(uno.getAutor()); setCodigo(uno.getCodigo()); setEditorial(uno.getEditorial()); setFechaDev(uno.getFechaDev()); setDia(uno.getDia()); setMes(uno.getMes());

27/08/2009

Pgina3

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
setAnio(uno.getAnio()); setEstado(uno.getEstado()); setEdicion(uno.getEdicion()); }// fin del constructor }//fin de la clase Libro Recuerde que una clase tiene DATOS privados y tiene METODOS pblicos y/o privados quienes deben manipular los datos de la clase. Los objetos acceden a los datos de la clase a travs de los mtodos pblicos.

http://www.parainformaticos.com

Tambin debe notar la presencia de dos constructores, uno sin parmetro y el otro con un parmetro que sirve para recibir un objeto de la misma clase y conservar los datos del parmetro recibido. En ste momento lo ms probable es que tenga marcado varias lneas con errores. Eso se debe a que falta generar los mtodos get/set para todos los atributos. Para generar los mtodos get/set haga clic derecho en la clase Libro, elija Refactor, Encapsulate Fields y marque los checks de todos los atributos como aprecia en la siguiente ventana:

Hace clic en el botn Refactor y listo. Ahora la clase completa queda as: public class Libro{ // datos privados de la clase private String Titulo, Autor, Codigo,Editorial, FechaDev;

private String dia, mes, anio, Estado; private int Edicion;

// constructor vaco public Libro() { }// fin del constructor vaco

// constructor que recibe un objeto Libro public Libro(Libro uno){

27/08/2009

Pgina4

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
setTitulo(uno.getTitulo()); setAutor(uno.getAutor()); setCodigo(uno.getCodigo()); setEditorial(uno.getEditorial()); setFechaDev(uno.getFechaDev()); setDia(uno.getDia());

http://www.parainformaticos.com

setMes(uno.getMes()); setAnio(uno.getAnio()); setEstado(uno.getEstado()); setEdicion(uno.getEdicion()); }// fin del constructor // mtodos get/set generados por NetBeans public String getTitulo() { return Titulo; } public void setTitulo(String Titulo) { this.Titulo = Titulo; } public String getAutor() { return Autor; } public void setAutor(String Autor) { this.Autor = Autor; } public String getCodigo() { return Codigo; } public void setCodigo(String Codigo) { this.Codigo = Codigo; } public String getEditorial() { return Editorial; } public void setEditorial(String Editorial) {

27/08/2009

Pgina5

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
this.Editorial = Editorial; } public String getFechaDev() { return FechaDev; } public void setFechaDev(String FechaDev) { this.FechaDev = FechaDev; }

http://www.parainformaticos.com

public String getDia() { return dia; } public void setDia(String dia) { this.dia = dia; } public String getMes() { return mes; } public void setMes(String mes) { this.mes = mes; } public String getAnio() { return anio; } public void setAnio(String anio) { this.anio = anio; } public String getEstado() { return Estado; } public void setEstado(String Estado) { this.Estado = Estado; } public int getEdicion() { return Edicion;

27/08/2009

Pgina6

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
} public void setEdicion(int Edicion) { this.Edicion = Edicion; } }// Fin de la clase Libro A continuacin la clase Libros que administra la informacin de todos los libros en un arreglo de objetos contenido en la clase ArrayList. Clic derecho en el paquete problema03, nuevo Java Class de nombre Libros y escribimos el siguiente cdigo:

http://www.parainformaticos.com

import java.util.*;// para la clase ArrayList public class Libros { private ArrayList v; // constructor public Libros(){ v = new ArrayList(); } // metodos de administracin // agrega un nuevo Libro public void addLibro(Libro e){ v.add(e); } // obtiene un Libro de la posicion dada public Libro getLibro(int i){ return (Libro)v.get(i); } // reemplaza un Libro ya existente public void setLibro(int i, Libro e){ v.set(i,e); } // retorna el numero de Libros guardados en el ArrayList public int numeroLibros(){ return v.size(); } // busca un Libro por su codigo public int busca(String codigo){ for (int i=0; i<numeroLibros(); i++)

27/08/2009

Pgina7

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
if (codigo.equals(getLibro(i).getCodigo())) return i;// retorna la posicin encontrada

return -1; //significa que no lo encuentra } // elimina un Libro public void elimina(int i){

http://www.parainformaticos.com

v.remove(i); } // elimina todos los objetos del ArrayList public void eliminaTodo(){ v.removeAll(v); } }// fin de la clase Libros

Desarrollo del Panel de Ingresos


Ahora, vamos a disear el Panelngresos. Clic derecho en el paquete problema03, nuevo JPanel Form de nombre PanelIngresos donde hacemos el siguiente diseo:

Vamos al cdigo fuente (source) del PanelIngresos para declarar los atributos y llenar los tems del comboBox en el constructor de la clase, as: public class PanelIngresos extends javax.swing.JPanel { // objeto de gestin de todos los libros static Libros libros = new Libros();

27/08/2009

Pgina8

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
// un objeto para acceder a la informacin de un libro Libro unLibro = new Libro();

/** Creates new form PanelIngresos */ public PanelIngresos() { // constructor initComponents();

http://www.parainformaticos.com

// llena los items del comboBox for (int i=2000; i <=2050; i++) cboEdicion.addItem(""+i);

El objeto de gestin de todos los libros tiene el modificador static porque ser utilizado desde varios paneles sin que pierda su informacin.

Regresamos al diseo y hacemos doble clic en el botn Aceptar para programar su accin: private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { aceptarIngresos(); } //----------------------------public void aceptarIngresos() { ingresarDatos(); if ( datosCorrectos() ) {

int i=libros.busca(unLibro.getCodigo()); if(i == -1) {// codigo NO REPETIDO

almacenaDatos(); mostrarIngresos(); prepararNuevoIngreso(); } else {

JOptionPane.showMessageDialog(this,"Cdigo Repetido"); txtCodigo.requestFocus(); } }

27/08/2009

Pgina9

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
} //............................. public void ingresarDatos() { // creamos espacio en memoria para un libro unLibro=new Libro();

//ingresar datos de un libro

http://www.parainformaticos.com

unLibro.setCodigo( leerCodigo() ); unLibro.setTitulo( leerTitulo() ); unLibro.setAutor( leerAutor() ); unLibro.setEditorial( leerEditorial() ); unLibro.setEdicion( Integer.parseInt(leerAnioDeEdicion()) ); unLibro.setEstado("Libre"); unLibro.setFechaDev("00/00/00"); } //............................. public String leerCodigo() { return txtCodigo.getText(); } //............................. public String leerTitulo() { return txtTitulo.getText(); } //............................. public String leerAutor() { return txtAutor.getText(); } //............................. public String leerEditorial() { return } //............................. public String leerAnioDeEdicion() { String AnioEdicion; txtEditorial.getText();

27/08/2009

Pgina10

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
AnioEdicion = cboEdicion.getSelectedItem().toString(); return AnioEdicion; } //----------------------------public boolean datosCorrectos() { String ValidarCodigo; int longitudCodi;

http://www.parainformaticos.com

// leer codigo ValidarCodigo = txtCodigo.getText();

// obtener longitud del codigo leido longitudCodi = ValidarCodigo.length();

// verificar que tenga 5 caracteres if ( longitudCodi < 5 || longitudCodi > 5) mostarMensaje(longitudCodi); return false; } else return true; } //............................. public void mostarMensaje(int ContCodi) { JOptionPane.showMessageDialog(this,"El Cdigo tiene " + ContCodi + " cifras y debe tener 5 cifras" ); txtCodigo.requestFocus(); } //----------------------------public void almacenaDatos() { // guardar un libro en el vector libros.addLibro(unLibro); // datos correctos // datos incorrectos {

27/08/2009

Pgina11

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)

// imprimir numero de libros mostrarNumeroDeRegistro(); } //............................. public void mostrarNumeroDeRegistro() {

http://www.parainformaticos.com

txtRegistro.setText(""+libros.numeroLibros()); } //----------------------------public void mostrarIngresos() { borrarArea();

// mostrar datos ingresados de un libro imprime("Nmero de Registro :" + libros.numeroLibros()); imprime("Cdigo\t:" + unLibro.getCodigo()); imprime("Titulo\t:" + unLibro.getTitulo()); imprime("Autor\t:" + unLibro.getAutor()); imprime("Editorial\t:" + unLibro.getEditorial()); imprime("Ao de Edicin\t:" + unLibro.getEdicion());

//adicionar los cdigos ingresados a los combos respectivos //para su posterior consulta PanelMovimientos.getComboCodigos().addItem(unLibro.getCodigo()); PanelDisponibilidad.getComboCodigos().addItem(unLibro.getCodigo()); } //............................. public void borrarArea() { txtSalida.setText(""); } //............................. public void imprime(String cadena) { txtSalida.append(cadena + "\n"); } //-----------------------------

27/08/2009

Pgina12

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
public void prepararNuevoIngreso(){ txtCodigo.setText(""); txtTitulo.setText(""); txtAutor.setText(""); txtEditorial.setText(""); cboEdicion.setSelectedIndex(0);

http://www.parainformaticos.com

txtCodigo.requestFocus(); } No le sorprenda que hasta ac le aparescan 2 lneas de error que corresponden a la llamada de los paneles PanelMovimientos y PanelDisponibilidad porque stos paneles an no desarrollamos su diseo y cdigo. As que no se preocupe y sigamos desarrollando el proyecto. Regresamos al diseo y hacemos doble clic en el botn Cancelar para programar su accin: private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) { prepararNuevoIngreso(); }

Algunas variables son de mbito static para que puedan ser utilizadas desde otros paneles sin perder su contenido. En el mtodo ingresarDatos() que se estn utilizando los mtodos de la clase propia para guardar los datos ledos, por ejemplo en la siguiente orden: unLibro.setEdicion( Integer.parseInt(leerAnioDeEdicion()) ); Se lee el ao de edicin del libro a travs del mtodo leerAnioDeEdicion(), el cual es retornado como String, se le convierte a entero cuyo valor es colocado en el dato del objeto unLibro a travs del mtodo setEdicion(). En el mtodo leerAnioDeEdicion() la siguiente orden: AnioEdicion = cboEdicion.getSelectedItem().toString(); Se obtiene el tem seleccionado como objeto cuyo valor se convierte en String a travs del mtodo toString(); siendo ste valor retornado para su uso. En el mtodo mostrarIngresos() que se muestran los datos ingresados utilizando los mtodos de la clase propia. Al hacer clic en el botn cancelar, no se guardan los datos ingresados y se prepara un nuevo ingreso.

Desarrollo del Panel Principal


Ahora, vamos a disear el PanelPrincipal. Clic derecho en el paquete problema03, nuevo JPanel Form de nombre PanelPrincipal donde hacemos el siguiente diseo:

PanelPrincipal con BorderLayout. En el centro colocamos un JTabbedPane que nos va permitir administrar un men de opciones tipo fichas. Vamos al cdigo fuente (source) del PanelPrincipal para escribir lo que est en negrita: public class PanelPrincipal extends javax.swing.JPanel { // declarar objetos de la GUI PanelIngresos panIng; PanelMovimientos panMovi; PanelDisponibilidad panDisp; PanelListado panList;

27/08/2009

Pgina13

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
public PanelPrincipal() { initComponents(); // Paneles definidos en clases separadas panIng = new PanelIngresos(); panMovi = new PanelMovimientos(); panDisp = new PanelDisponibilidad(); panList = new PanelListado(); // enlaza cada pestaa con un panel a mostrar jtpMenu.addTab("Ingresos",panIng); jtpMenu.addTab("Movimientos",panMovi); jtpMenu.addTab("Disponibilidad",panDisp); jtpMenu.addTab("Listado",panList);

http://www.parainformaticos.com

// establece texto que aparece al pasar el Mouse por cada // ficha jtpMenu.setToolTipTextAt(0,"Ingresa nuevo libro"); jtpMenu.setToolTipTextAt(1,"Cambia de estado:libre, sala, domicilio"); jtpMenu.setToolTipTextAt(2,"Muestra el estado actual del libro"); jtpMenu.setToolTipTextAt(3,"Muestra todos los libros"); // establece color de fondo para cada pestaa jtpMenu.setBackgroundAt(0,new Color(149,199,199)); jtpMenu.setBackgroundAt(1,new Color(199,199,149)); jtpMenu.setBackgroundAt(2,new Color(199,149,199)); jtpMenu.setBackgroundAt(3,new Color(249,249,199)); // establece un icono para cada pestaa jtpMenu.setIconAt(0, new ImageIcon(getClass().getResource("/images/bolita.gif"))); jtpMenu.setIconAt(1, new ImageIcon(getClass().getResource("/images/estrei.gif"))); jtpMenu.setIconAt(2, new ImageIcon(getClass().getResource("/images/estrei.gif"))); jtpMenu.setIconAt(3, new ImageIcon(getClass().getResource("/images/bolita.gif"))); } Si queremos que las fichas tenga alguna imagen, debemos crear la carpeta images dentro de la carpeta source (src) donde colocaremos las imgenes correspondientes. Para mayor detalle sobre la clase JTabbedPane puede revisar el captulo 3. Podemos decir que el uso de las clases propias no slo permiten construir paneles independientes sino tambin permiten definir objetos de dichas clases en cualquier panel. En un panel se pueden declarar variables globales que sean utilizadas exclusivamente en dicho panel; sin embargo cuando se tiene la necesidad de utilizar la misma variable sin perder su valor desde otros paneles; stas variables deben ser precedidas por la palabra reservada static y desarrollar su mtodo de retorno correspondiente. Tan simple como eso. Ahora creamos nuestro frame principal: clic derecho en el paquete problema03, elegimos nuevo JFrame Form de nombre Principal, le ponemos un ttulo y le aplicamos distribucin BorderLayout. Luego vamos al cdigo fuente y escribimos lo que est en negrita:

public class Principal extends javax.swing.JFrame {

public Principal() { initComponents(); add(new PanelPrincipal()); setSize(500,300); }

27/08/2009

Pgina14

Super JAVA SE for Windows with NetBeans IDE - Demo


Por: Julio Vsquez Paragulla (jvasquez@parainformaticos.com)
Ya puede ejecutar su aplicacin.

Las opciones de men pueden tener diversas presentaciones; una de ellas es en forma de fichas como la que hemos presentado en ste ltimo ejercicio; otra es en forma de radioButtons; otra es en forma de botones; otra es en forma de men en un Frame cuando una opcin a su vez tiene otras opciones. Esta ltima forma la veremos en el ejercicio del prximo captulo.

El desarrollo completo del proyecto lo puede ver en el Libro y en el CD adjunto.

http://www.parainformaticos.com

Gracias por leer nuestros Libros! Para Informticos facilita tu aprendizaje!

27/08/2009

Pgina15

Anda mungkin juga menyukai