svverpdf

March 21, 2018 | Author: G̶i̶n̶o̶ C̶h̶a̶p̶o̶ñ̶a̶n̶ ̶c̶h̶a̶p̶o̶ñ̶a̶n̶ | Category: Integrated Development Environment, Java (Programming Language), Net Beans, Books, Point And Click


Comments



Description

Super JAVA SE for Windows with NetBeans IDE - DemoPor: Julio Vásquez Paragulla ([email protected]) Proyecto Biblioteca (Programa 3, Capítulo 9) Diseñe una aplicación que permita a una biblioteca tener un control sobre los préstamos de libros. Cada libro tiene los siguientes datos: código, título, autor, editorial, año de edición, fecha de devolución, estado(libre, sala, domicilio). Considere las siguientes opciones de menú: Ingresos, Movimientos, Disponibilidad y Listado. http://www.parainformaticos.com  La opción de Ingresos La opción de Ingresos consiste en registrar los datos considerando lo siguiente: a) El número de registro se genera automáticamente en forma consecutiva empezando en 1 para el primer libro. b) El código del libro debe tener 5 caracteres alfanuméricos c) El año de edición puede ser a partir del año 2000 hasta el año 2050 d) No se permite el ingreso de códigos duplicados. e) El estado del libro no se ingresa, pero debe considerarse como libre. La opción de Movimientos La opción de Movimientos consiste en seleccionar un libro previamente ingresado, mostrar sus datos, y elegir su nuevo estado: Libre, préstamo a Sala, préstamo a Domicilio. Sólo si el nuevo estado fuera préstamo a domicilio se solicita fecha de devolución; en otro caso la fecha de devolución toma el valor 00/00/00. Para activar esta opción sólo se tiene que hacer clic en la ficha Movimientos como se aprecia a continuación. Observe que al pasar el mouse sobre ésta ficha aparece un texto con borde relacionado al contenido de la opción. 27/08/2009  Página 1 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) http://www.parainformaticos.com  La opción de Disponibilidad La opción de Disponibilidad sirve para consultar los datos de un libro ya ingresado, eligiéndolo desde un comboBox. La opción de Listado La opción de Listado muestra todos los libros ingresados y almacenados en el arreglo de objetos, en forma de tabla. Para mostrar la información actualizada debe hacer clic en el botón de refrescar tabla. 27/08/2009  Página 2 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) http://www.parainformaticos.com  Desarrollo El código 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 código 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 vacío public Libro() { }// fin del constructor vacío // 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  Página 3 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) 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 públicos y/o privados quienes deben manipular los datos de la clase. Los objetos acceden a los datos de la clase a través de los métodos públicos. http://www.parainformaticos.com  También debe notar la presencia de dos constructores, uno sin parámetro y el otro con un parámetro que sirve para recibir un objeto de la misma clase y conservar los datos del parámetro recibido. En éste momento lo más probable es que tenga marcado varias líneas con errores. Eso se debe a que falta generar los métodos get/set para todos los atributos. Para generar los métodos 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 botón 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 vacío public Libro() { }// fin del constructor vacío // constructor que recibe un objeto Libro public Libro(Libro uno){ 27/08/2009  Página 4 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) 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 // métodos 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  Página 5 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) 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  Página 6 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) } public void setEdicion(int Edicion) { this.Edicion = Edicion; } }// Fin de la clase Libro A continuación la clase Libros que administra la información 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 código: 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 administración // 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  Página 7 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) if (codigo.equals(getLibro(i).getCodigo())) return i;// retorna la posición 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 diseñar el Panelngresos. Clic derecho en el paquete problema03, nuevo JPanel Form de nombre PanelIngresos donde hacemos el siguiente diseño: Vamos al código 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 gestión de todos los libros static Libros libros = new Libros(); 27/08/2009  Página 8 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) // un objeto para acceder a la información 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 gestión de todos los libros tiene el modificador static porque será utilizado desde varios paneles sin que pierda su información. Regresamos al diseño y hacemos doble clic en el botón Aceptar para programar su acción: 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,"Código Repetido"); txtCodigo.requestFocus(); } } 27/08/2009  Página 9 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) } //............................. 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  Página 10 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) 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 Código 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  Página 11 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) // 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("Número de Registro :" + libros.numeroLibros()); imprime("Código\t:" + unLibro.getCodigo()); imprime("Titulo\t:" + unLibro.getTitulo()); imprime("Autor\t:" + unLibro.getAutor()); imprime("Editorial\t:" + unLibro.getEditorial()); imprime("Año de Edición\t:" + unLibro.getEdicion()); //adicionar los códigos 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  Página 12 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) 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 líneas de error que corresponden a la llamada de los paneles PanelMovimientos y PanelDisponibilidad porque éstos paneles aún no desarrollamos su diseño y código. Así que no se preocupe y sigamos desarrollando el proyecto. Regresamos al diseño y hacemos doble clic en el botón Cancelar para programar su acción: 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 método ingresarDatos() que se están utilizando los métodos de la clase propia para guardar los datos leídos, por ejemplo en la siguiente orden: unLibro.setEdicion( Integer.parseInt(leerAnioDeEdicion()) ); Se lee el año de edición del libro a través del método leerAnioDeEdicion(), el cual es retornado como String, se le convierte a entero cuyo valor es colocado en el dato del objeto unLibro a través del método setEdicion(). En el método leerAnioDeEdicion() la siguiente orden: AnioEdicion = cboEdicion.getSelectedItem().toString(); Se obtiene el ítem seleccionado como objeto cuyo valor se convierte en String a través del método toString(); siendo éste valor retornado para su uso. En el método mostrarIngresos() que se muestran los datos ingresados utilizando los métodos de la clase propia. Al hacer clic en el botón cancelar, no se guardan los datos ingresados y se prepara un nuevo ingreso. Desarrollo del Panel Principal Ahora, vamos a diseñar el PanelPrincipal. Clic derecho en el paquete problema03, nuevo JPanel Form de nombre PanelPrincipal donde hacemos el siguiente diseño: PanelPrincipal con BorderLayout. En el centro colocamos un JTabbedPane que nos va permitir administrar un menú de opciones tipo fichas. Vamos al código 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  Página 13 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) public PanelPrincipal() { initComponents(); // Paneles definidos en clases separadas panIng = new PanelIngresos(); panMovi = new PanelMovimientos(); panDisp = new PanelDisponibilidad(); panList = new PanelListado(); // enlaza cada pestaña 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 pestaña 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 pestaña 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 imágenes correspondientes. Para mayor detalle sobre la clase JTabbedPane puede revisar el capítulo 3. Podemos decir que el uso de las clases propias no sólo permiten construir paneles independientes sino también 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 método 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 título y le aplicamos distribución BorderLayout. Luego vamos al código 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  Página 14 Super JAVA SE for Windows with NetBeans IDE - Demo Por: Julio Vásquez Paragulla ([email protected]) Ya puede ejecutar su aplicación. 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 opción a su vez tiene otras opciones. Esta última forma la veremos en el ejercicio del próximo capítulo. 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 Informáticos facilita tu aprendizaje! 27/08/2009  Página 15
Copyright © 2024 DOKUMEN.SITE Inc.