41
Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas e Informática E.A.P. de Ingeniería de Sistemas Algorítmica II GUIA “F” DE LABORATORIO HERENCIA – CLASES ABSTRACTAS – INTERFACE Objetivo: Aplicar los conceptos de la Programación Orientada a Objetos. Aplicar las definiciones de Herencia, Clases Abstractas e Interface Java. Aprender la herencia entre clases, utilizando el lenguaje de programación Java. Descripción: A continuación se presentan varias clases. Cada clase contiene métodos de tipo SET y GET, y métodos operacionales. Los métodos operacionales son métodos que implementan las operaciones ó “FUNCIONALIDADES” del objeto. En esta guía de Laboratorio se va a trabajar con el paquete Clases, que contiene a las clases ArregloDeDocumentos, Documento, Libro, Revista y Tesis. El objetivo es comprender como se relacionan estas clases, especialmente como funciona el mecanismo de la Herencia. El alumno debe encontrar el mecanismo que utilizan las clases para el envió de datos; así como las referencias entre objetos. Al finalizar esta guía, cada alumno comprenderá cuando, donde, como y por que se instancian los objetos. Se debe mencionar que para el desarrollo de esta guía de laboratorio se ha utilizado la librería gráfica SWING de Java, la cual posee muchos componentes gráficos tales como JFrame (marco o contorno), JPanel (panel o lienzo), JLabel (etiqueta), JTextField (caja de texto), JButton (botón), JTextArea (área de texto), JScrollPane (panel de scroll horizontal y vertical), JMenuBar (barra de menú), JToolBar (barra de herramientas), etc. A su vez se ha utilizado la librería gráfica AWT de Java, para el uso de algunos de sus componentes gráfico, como por ejemplo, la clase Color. Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir que cada clase tiene atributos y métodos “PROPIOS” de su correspondiente objeto real. Se pide analizar el código desarrollado, e implementar todas las funcionalidades. PAQUETE Biblioteca.Clases

Guia F de Laboratorio

Embed Size (px)

DESCRIPTION

Algorítmica 2

Citation preview

Universidad Nacional Mayor de San Marcos

Algortmica IIGua F de Laboratorio Herencia, Clases Abstractas e Interface Java

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniera de Sistemas e Informtica

E.A.P. de Ingeniera de Sistemas

Algortmica II

GUIA F DE LABORATORIO

HERENCIA CLASES ABSTRACTAS INTERFACE Objetivo:

Aplicar los conceptos de la Programacin Orientada a Objetos.Aplicar las definiciones de Herencia, Clases Abstractas e Interface Java.Aprender la herencia entre clases, utilizando el lenguaje de programacin Java.

Descripcin:

A continuacin se presentan varias clases. Cada clase contiene mtodos de tipo SET y GET, y mtodos operacionales. Los mtodos operacionales son mtodos que implementan las operaciones FUNCIONALIDADES del objeto.En esta gua de Laboratorio se va a trabajar con el paquete Clases, que contiene a las clases ArregloDeDocumentos, Documento, Libro, Revista y Tesis. El objetivo es comprender como se relacionan estas clases, especialmente como funciona el mecanismo de la Herencia. El alumno debe encontrar el mecanismo que utilizan las clases para el envi de datos; as como las referencias entre objetos. Al finalizar esta gua, cada alumno comprender cuando, donde, como y por que se instancian los objetos. Se debe mencionar que para el desarrollo de esta gua de laboratorio se ha utilizado la librera grfica SWING de Java, la cual posee muchos componentes grficos tales como JFrame (marco o contorno), JPanel (panel o lienzo), JLabel (etiqueta), JTextField (caja de texto), JButton (botn), JTextArea (rea de texto), JScrollPane (panel de scroll horizontal y vertical), JMenuBar (barra de men), JToolBar (barra de herramientas), etc. A su vez se ha utilizado la librera grfica AWT de Java, para el uso de algunos de sus componentes grfico, como por ejemplo, la clase Color.Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir que cada clase tiene atributos y mtodos PROPIOS de su correspondiente objeto real. Se pide analizar el cdigo desarrollado, e implementar todas las funcionalidades.

PAQUETE Biblioteca.Clases

Documento

A continuacin se presenta la clase Documento, que define los atributos y mtodos ms importantes de un documento de una biblioteca de la vida real. Es decir, esta clase Documento define los atributos y mtodos mas importante de un documento.

Paso a seguir 1:

1. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

2. Generar el archivo Documento.class (Proceso de Compilacin)

La clase Documento

//Declaracin del nombre del paquete donde se encuentra la clase 'Documento'

package Biblioteca.Clases;

//Declaramos las librerias del Java que necesitamos usar

import java.util.Date;

//Declaracin de la clase 'Documento'

public class Documento {

//Declaracin de Atributos

protected String codigo;

protected String titulo;

protected String descripcion;

protected String autor;

protected int ao;

protected Date fecha;

protected int cantidad;

protected boolean estado;

//Este es el mtodo constructor por defecto

public Documento(){

this.codigo = "Codigo";

this.titulo = "Documento";

this.descripcion = "Descripcion";

this.autor = "Autor";

this.ao = 2008;

this.fecha = new Date();

this.cantidad = 1;

this.estado = true;

}

//Mtodos de tipo SET

public void setCodigo(String codigo) {

this.codigo = codigo;

}

public void setTitulo(String titulo) {

this.titulo = titulo;

}

public void setDescripcion(String descripcion) {

this.descripcion = descripcion;

}

public void setAutor(String autor) {

this.autor = autor;

}

public void setAo(int ao) {

this.ao = ao;

}

public void setFecha(Date fecha) {

this.fecha = fecha;

}

public void setCantidad(int cantidad) {

this.cantidad = cantidad;

}

public void setEstado(boolean estado) {

this.estado = estado;

}

//Mtodos de tipo GET

public String getCodigo() {

return (this.codigo);

}

public String getTitulo() {

return (this.titulo);

}

public String getDescripcion() {

return (this.descripcion);

}

public String getAutor() {

return (this.autor);

}

public int getAo() {

return (this.ao);

}

public Date getFecha() {

return (this.fecha);

}

public int getCantidad() {

return (this.cantidad);

}

public boolean getEstado() {

return (this.estado);

}

}

Libro

A continuacin se presenta la clase Libro, que define los atributos y mtodos ms importantes de un libro de la vida real. Es decir, esta clase Libro define los atributos y mtodos mas importante de un libro.

OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Libro HEREDA los atributos y mtodos (de mbito protegido y pblico) de la clase Documento.

Paso a seguir 2:

3. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

4. Generar el archivo Libro.class (Proceso de Compilacin)

La clase Libro

package Biblioteca.Clases;

public class Libro extends Documento{

}

Revista

A continuacin se presenta la clase Revista, que define los atributos y mtodos ms importantes de una revista de la vida real. Es decir, esta clase Revista define los atributos y mtodos ms importantes de una revista.

OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Revista HEREDA los atributos y mtodos (de mbito protegido y pblico) de la clase Documento.

Paso a seguir 3:

5. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

6. Generar el archivo Revista.class (Proceso de Compilacin)

La clase Revista

package Biblioteca.Clases;

public class Revista extends Documento{

}

Tesis

A continuacin se presenta la clase Tesis, que define los atributos y mtodos ms importantes de una tesis de la vida real. Es decir, esta clase Tesis define los atributos y mtodos ms importantes de una tesis.

OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Tesis HEREDA los atributos y mtodos (de mbito protegido y pblico) de la clase Documento.

Paso a seguir 4:

7. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

8. Generar el archivo Tesis.class (Proceso de Compilacin)

La clase Tesis

package Biblioteca.Clases;

public class Tesis extends Documento{

}

ArregloDeDocumentos

A continuacin se presenta la clase ArregloDeDocumentos, que define los atributos y mtodos ms importantes de un conjunto de documentos de vida real, por ejemplo una coleccin de libros, revistas y tesis. Es decir, esta clase ArregloDeDocumentos define los atributos y mtodos ms importantes de para poder almacenar temporalmente (en Memoria RAM) a un conjunto de documentos (que pueden ser Libros, Revistas y Tesis).

Paso a seguir 5:

9. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

10. Generar el archivo ArregloDeDocumentos.class (Proceso de Compilacin)

La clase ArregloDeDocumentos

//Declaracin del nombre del paquete donde se encuentra la clase 'ArregloDeDocumentos'

package Biblioteca.Clases;

//Declaramos las librerias del Java que necesitamos usar

import java.util.ArrayList;

//Declaracin de la clase 'ArregloDeDocumentos'

public class ArregloDeDocumentos {

//Declaracin de Atributos

//Declamos un objeto de tipo ArrayList que forma parte de la familia COLLECTION

private ArrayList documentos;

//Este es el mtodo constructor por defecto

public ArregloDeDocumentos(){

//Instanciamos al objeto de tipo ArrayList

documentos = new ArrayList();

}

//Este mtodo ade un objeto de tipo Documento dentro del ArrayList

public void aadeDocumento(Documento documento){

documentos.add(documento);

}

//Este mtodo ade por ndice a un objeto de tipo Documento dentro del ArrayList

public void insertaDocumentoPorIndice(int indice, Documento documento){

documentos.set(indice,documento);

}

//Este mtodo devuelve la referencia al ArrayList

public ArrayList devuelveElArregloDeDocumentos(){

return documentos;

}

//Este mtodo devuelve por ndice a un objeto que est dentro del ArrayList

public Documento devuelveUnDocumentoPorIndice(int indice){

return (Documento)documentos.get(indice);

}

}

PAQUETE Biblioteca. Formularios

jpanFondo

A continuacin se presenta la clase jpanFondo, que hereda de la clase JPanel (javax.swing.JPanel). Esta clase se utiliza para crear el panel o lienzo de fondo del formulario principal, as como de los dems formularios.

Paso a seguir 6:

11. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

12. Generar el archivo jpanFondo.class (Proceso de Compilacin)

La clase jpanFondo

//Declaracin del nombre del paquete donde se encuentra la clase 'jpanFondo'

package Biblioteca.Formularios;

//Declaracion de libreras o paquetes

import javax.swing.JPanel;

import java.awt.Color;

//Definimos la clase 'jpanFondo'

//que HEREDA de la clase 'JPanel'

public class jpanFondo extends JPanel{

//Declaracin de Atributos

//Declaramos un objeto de tipo 'Color'

protected Color coColorDeFondo;

//Atributo que almacenar la ruta donde se encuentran las imagenes

protected String rutaDeImagenes;

//Este es el Mtodo Constructor por defecto

public jpanFondo(){

this.setLayout(null);

//Instanciamos el objeto 'coColorDeFondo'

//se usan 3 nmeros enteros del rango [0-255]

//para crear un color en el sistema RGB

//codigo de colores del color 'lightyellow'

coColorDeFondo = new Color(255,255,224);

//Esta es la ruta por defecto, donde se encuentran las imagenes

//Esta ruta depender de la unidad de disco duro donde se encuentre

//tu projecto, debers de modificarla si es necesario

rutaDeImagenes = "D:/CURSOS 2008 II/ALGORITMICA II/EjemplosJCreator/Proyecto/src/Biblioteca/Imagenes/";

//Asignamos el objeto 'coColorDeFondo' como

//el color de fondo del jpanFondo

this.setBackground(coColorDeFondo);

}

}

jpanInicio

A continuacin se presenta la clase jpanInicio, que hereda de la clase jpanFondo. Esta clase se utiliza para crear el panel o lienzo que se mostrar al inicio de la aplicacin. Notar que se muestran dos imgenes en el panel. Cada imagen se carga en un componente JLabel (javax.swing.JLabel) tambin llamado etiqueta.Este panel ser el PRIMER panel en agregarse dentro del panel jpanFondo, el cual tiene como Administrador de Diseo a un objeto de tipo CardLayout.

OBSERVACIN: Esta clase hereda de la clase 'jpanFondo'.

Paso a seguir 7:

13. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

14. Generar el archivo jpanInicio.class (Proceso de Compilacin)

La clase jpanInicio

//Declaracin del nombre del paquete donde se encuentra la clase 'jpanInicio'

package Biblioteca.Formularios;

//Declaramos las librerias del Java que necesitamos usar

import javax.swing.JLabel;

import javax.swing.ImageIcon;

//Declaracin de la clase 'jpanInicio' que hereda de un 'jpanFondo'

public class jpanInicio extends jpanFondo{

//Declaracin de Atributos

//Declaracin de componentes grficos swing para crear la GUI

private JLabel jlblImagen;

private JLabel jlblTitulo;

//Este es el mtodo constructor por defecto

//Invoca o llama al mtodo 'iniciarComponentes()'

public jpanInicio(){

iniciarComponentes();

}

//Este mtodo instancia los objetos o componentes grficos

//que se van a mostrar dentro del JPanel (lienzo)

public void iniciarComponentes(){

//Indicamos que el Administrador de Diseo sea nulo

this.setLayout(null);

//Instanciamos dos objetos de tipo JLabel

this.jlblImagen = new JLabel();

this.jlblTitulo = new JLabel();

//Instanciamos dos objetos de tipo 'ImageIcon'

//Estos objetos cargarn una imagen respectivamente

ImageIcon iconoImagen = new ImageIcon(rutaDeImagenes+"estudiando.gif");

ImageIcon iconoTitulo = new ImageIcon(rutaDeImagenes+"titulo.jpg");

//Indicamos a cada objeto de tipo 'JLabel' cargar al objeto de tipo

//'ImageIcon', de esta forma la imagen se mostrar en el 'JLabel'

this.jlblImagen.setIcon(iconoImagen);

this.jlblImagen.setBounds(250,80,320,320);

this.jlblTitulo.setIcon(iconoTitulo);

this.jlblTitulo.setBounds(100,400,600,100);

//Aadimos cada objeto de tipo 'JLabel' dentro del JPanel 'jpanInicio'

this.add(jlblImagen);

this.add(jlblTitulo);

}

}

jpanBarraDeMenu

A continuacin se presenta la clase jpanBarraDeMenu, que hereda de la clase jpanFondo. Esta clase se utiliza para crear el panel o lienzo de que contendr a la barra de men. Esta barra de men contiene a dos mens llamados (Archivo) y (Mantenimiento). Este panel se colocar en la parte superior del formulario principal llamado jfrmPrincipal.

OBSERVACIN: Esta clase hereda de la clase 'jpanFondo'.

Paso a seguir 8:

15. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

16. Generar el archivo jpanBarraDeMenu.class (Proceso de Compilacin)

La clase jpanBarraDeMenu

//Declaracin del nombre del paquete donde se encuentra la clase 'jpanBarraDeMenu'

package Biblioteca.Formularios;

//Declaramos las librerias del Java que necesitamos usar

import javax.swing.JMenuBar;

import javax.swing.JMenu;

import javax.swing.JMenuItem;

import javax.swing.ImageIcon;

import javax.swing.JSeparator;

import java.awt.CardLayout;

import javax.swing.JOptionPane;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//Declaracin de la clase 'jpanBarraDeMenu' que hereda de un 'jpanFondo'

//e implementa a la interface 'ActionListener'

public class jpanBarraDeMenu extends jpanFondo implements ActionListener{

//Declaracin de Atributos

//Declaracin de componentes grficos swing para crear la GUI

private JMenuBar jmnbBarra;

private JMenu jmnArchivo;

private JMenuItem jmniEntrar;

private JMenuItem jmniSalir;

private JMenu jmnMantenimiento;

private JMenuItem jmniLibro;

private JMenuItem jmniRevista;

private JMenuItem jmniTesis;

//Declaracin del objeto que referenciar al objeto 'jpanelFondo' creado

//en la clase 'jfrmPrincipal'

private jpanFondo jpanelFondo;

//Este es el mtodo constructor por parmetro

//le llega por parmetro la referencia de un objeto de tipo 'jpanFondo'

//luego invoca o llama al mtodo 'iniciarComponentes()'

public jpanBarraDeMenu(jpanFondo jpanelFondo){

this.jpanelFondo = jpanelFondo;

iniciarComponentes();

}

//Este mtodo instancia los objetos o componentes grficos

//que se van a mostrar dentro del JPanel (lienzo)

public void iniciarComponentes(){

//Indicamos que el Administrador de Diseo sea nulo

this.setLayout(null);

//Instanciamos a la barra de men

//Indicamos su posicin y tamao dentro del JPanel

jmnbBarra = new JMenuBar();

jmnbBarra.setBounds(0,0,800,50);

//Instanciamos a un men que se llamar 'jmnArchivo'

jmnArchivo = new JMenu("Archivo");

//Instanciamos a unitem del men llamado 'jmniEntrar'

//Este item va ir dentro del men 'jmnArchivo'

//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jmniEntrar = new JMenuItem("Iniciar");

jmniEntrar.setIcon(new ImageIcon(rutaDeImagenes+"iniciar.jpg"));

jmniEntrar.addActionListener(this);

//Instanciamos a unitem del men llamado 'jmniSalir'

//Este item va ir dentro del men 'jmnArchivo'

//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jmniSalir = new JMenuItem("Cerrar");

jmniSalir.setIcon(new ImageIcon(rutaDeImagenes+"cerrar.gif"));

jmniSalir.addActionListener(this);

//Aadimos los items al men 'jmnArchivo'

//Tambien aadimos un objeto de tipo 'JSeparator'

//el cual es una lnea que separa a dos items del men

jmnArchivo.add(jmniEntrar);

jmnArchivo.add(new JSeparator());

jmnArchivo.add(jmniSalir);

//Instanciamos a un men que se llamar 'jmnMantenimiento'

jmnMantenimiento = new JMenu("Mantenimiento");

//Instanciamos a unitem del men llamado 'jmniLibro'

//Este item va ir dentro del men 'jmnMantenimiento'

//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jmniLibro = new JMenuItem("Libro");

jmniLibro.setIcon(new ImageIcon(rutaDeImagenes+"libro.gif"));

jmniLibro.addActionListener(this);

//Instanciamos a unitem del men llamado 'jmniRevista'

//Este item va ir dentro del men 'jmnMantenimiento'

//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jmniRevista = new JMenuItem("Revista");

jmniRevista.setIcon(new ImageIcon(rutaDeImagenes+"revista.jpg"));

jmniRevista.addActionListener(this);

//Instanciamos a unitem del men llamado 'jmniTesis'

//Este item va ir dentro del men 'jmnMantenimiento'

//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jmniTesis = new JMenuItem("Tesis");

jmniTesis.setIcon(new ImageIcon(rutaDeImagenes+"tesis.gif"));

jmniTesis.addActionListener(this);

//Aadimos los items al men 'jmnMantenimiento'

//Tambien aadimos un objeto de tipo 'JSeparator'

//el cual es una lnea que separa a dos items del men

jmnMantenimiento.add(jmniLibro);

jmnMantenimiento.add(new JSeparator());

jmnMantenimiento.add(jmniRevista);

jmnMantenimiento.add(new JSeparator());

jmnMantenimiento.add(jmniTesis);

//Aadimos los mens dentro de la barra

jmnbBarra.add(jmnArchivo);

jmnbBarra.add(jmnMantenimiento);

//Desactivamos las opciones del men

cambiarEstadoDeLaBarraDeMenu(false);

//Aadimos la barra de mens dentro del JPanel

this.add(jmnbBarra);

}

//Este mtodo activa o desactiva a las opciones del men

//segn sea el valor de la varible que viene por parmetro

public void cambiarEstadoDeLaBarraDeMenu(boolean valor){

jmniEntrar.setEnabled(!valor);

jmniSalir.setEnabled(valor);

jmnMantenimiento.setEnabled(valor);

}

//Este mtodo detecta los eventos de tipo ACTION generados en los componentes

//grficos swing. Siempre y cuando dichos componentes tengan habilitado su

//propiedad 'addActionListener(this)'

public void actionPerformed(ActionEvent e){

if(e.getSource() == jmniEntrar){

//Cambiamos de 'JPanel', ahora mostramos a 'jpanValidarUsuario'

((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"usuario" );

}

if(e.getSource() == jmniSalir){

//Mostramos una ventana de dialogo que pregunte si deseamos salir

int numero = JOptionPane.showConfirmDialog(null,

"Desea SALIR del Sistema",

"Salir",

JOptionPane.YES_NO_OPTION);

if(numero == 0){

//Si la respuesta fue 'SI', entonces deshabilitamos las opciones del men

cambiarEstadoDeLaBarraDeMenu(false);

}

}

if(e.getSource() == jmniLibro){

//Cambiamos de 'JPanel', ahora mostramos a 'jpanMantenimientoLibro'

((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"libro" );

}

if(e.getSource() == jmniRevista){

//Cambiamos de 'JPanel', ahora mostramos a 'jpanMantenimientoRevista'

((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"revista" );

}

if(e.getSource() == jmniTesis){

//Cambiamos de 'JPanel', ahora mostramos a 'jpanMantenimientoTesis'

((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"tesis" );

}

}

}

jpanValidarUsuario

A continuacin se presenta la clase jpanValidarUsuario, que hereda de la clase jpanFondo e implementa la interface java ActionListener. Esta clase se utiliza para crear el panel o lienzo de que contendr a los componentes grficos swing, que forman parte del formulario para validar el USUARIO y CLAVE del usuario del sistema.

OBSERVACIN: Esta clase hereda de la clase 'jpanFondo'.

Pasos a seguir 9:

17. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

18. Generar el archivo jpanValidarUsuario.class (Proceso de Compilacin)

La clase jpanValidarUsuario

//Declaracin del nombre del paquete donde se encuentra la clase 'jpanValidarUsuario'

package Biblioteca.Formularios;

//Declaramos las librerias del Java que necesitamos usar

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.JPasswordField;

import javax.swing.JButton;

import javax.swing.ImageIcon;

import java.awt.CardLayout;

import javax.swing.JOptionPane;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//Declaracin de la clase 'jpanValidarUsuario'

//que hereda de un 'jpanFondo'

//e implementa a la interface 'ActionListener'

public class jpanValidarUsuario extends jpanFondo implements ActionListener{

//Declaracin de Atributos

//Declaracin de componentes grficos swing para crear la GUI

private JLabel jlblImagen;

private JLabel jlblUsuario;

private JLabel jlblClave;

private JTextField jtxfUsuario;

private JPasswordField jpwfClave;

private JButton jbtnAceptar;

//Declaracin de los objetos que referencian a 'jpanelFondo'

//y 'jpanBarraDeMenu', instanciados en la clase 'jfrmPrincipal'

private jpanBarraDeMenu jpanelBarra;

private jpanFondo jpanelFondo;

//Este es el mtodo constructor por parmetro

//le llega por parmetro la referencia de un objeto de tipo 'jpanBarraDeMenu',

//y 'jpanFondo', luego invoca o llama al mtodo 'iniciarComponentes()'

public jpanValidarUsuario(jpanBarraDeMenu jpanelBarra,

jpanFondo jpanelFondo){

this.jpanelBarra = jpanelBarra;

this.jpanelFondo = jpanelFondo;

iniciarComponentes();

}

//Este mtodo instancia los objetos o componentes grficos

//que se van a mostrar dentro del JPanel (lienzo)

public void iniciarComponentes(){

//Indicamos que el Administrador de Diseo sea nulo

this.setLayout(null);

//***************************************************

//Creamos la GUI para validar los datos de un Usuario

//***************************************************

//Instanciamos objetos de tipo JLabel (etiqueta), JTextField (caja de texto),

//JButton (Botn)

//Indicamos el texto a mostrar

//Indicamos la posicin y tamao de cada componente grfico dentro del JPanel

jlblImagen = new JLabel();

jlblImagen.setIcon(new ImageIcon(rutaDeImagenes+"key.jpg"));

jlblImagen.setBounds(180,80,200,200);

jlblUsuario = new JLabel("Usuario:");

jlblUsuario.setBounds(420,150,50,20);

jlblClave = new JLabel("Clave:");

jlblClave.setBounds(420,180,50,20);

jtxfUsuario = new JTextField();

jtxfUsuario.setBounds(480,150,100,20);

jpwfClave = new JPasswordField();

jpwfClave.setBounds(480,180,100,20);

jbtnAceptar = new JButton("Entrar");

jbtnAceptar.setBounds(480,210,100,20);

jbtnAceptar.addActionListener(this);

//Aadimos cada componente grfico swing dentro del JPanel

this.add(jlblImagen);

this.add(jlblUsuario);

this.add(jtxfUsuario);

this.add(jlblClave);

this.add(jpwfClave);

this.add(jbtnAceptar);

}

//Este mtodo detecta los eventos de tipo ACTION generados en los componentes

//grficos swing. Siempre y cuando dichos componentes tengan habilitado su

//propiedad 'addActionListener(this)'

public void actionPerformed(ActionEvent e){

if(e.getSource() == jbtnAceptar){

//Validamos el ingreso del 'USUARIO' y 'CLAVE'

if(jtxfUsuario.getText().trim().equals("Administrador")&&

jpwfClave.getText().trim().equals("123456")){

//Habilitamos las opciones de la barra de mens

jpanelBarra.cambiarEstadoDeLaBarraDeMenu(true);

//Mostramos el JPanel 'jpanInicio'

((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"inicio" );

}else{

JOptionPane.showMessageDialog(null,"Datos incorrectos","Validar usuario",

JOptionPane.WARNING_MESSAGE);

}

}

}

}

jpanMantenimientoDocumento

A continuacin se presenta a la clase abstracta jpanMantenimientoDocumento, que hereda de la clase jpanFondo e implementa la interface java ActionListener. Esta clase se utiliza para crear el panel o lienzo de que contendr a los componentes grficos swing, que forman parte del formulario para el registro de un Nuevo Documento (que puede ser un libro, una revista o una tesis).

Este panel disea un formulario tpico de Mantenimiento, el cual tiene una barra de herramientas con botones que realizan las operaciones de (1) Nuevo, (2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.

Este panel va a servir de clase Padre para crear clases Hijas.

Esta clase jpanMantenimientoDocumento declara 4 mtodos abstractos, los cuales son:

public abstract void grabarDocumento();

public abstract void mostrarDocumento();

public abstract void activarDocumento();

public abstract void inactivarDocumento();

Estos mtodos abstractos sern IMPLEMENTADOS OBLIGATORIAMENTE en las clases hijas.

OBSERVACIN: Esta clase hereda de la clase 'jpanFondo'. Pasos a seguir 10:

19. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

20. Generar el archivo jpanMantenimientoDocumento.class (Proceso de Compilacin)

La clase jpanMantenimientoDocumento

//Declaracin del nombre del paquete donde se encuentra la clase 'jpanMantenimientoDocumento'

package Biblioteca.Formularios;

//Declaramos las librerias del Java que necesitamos usar

import javax.swing.JToolBar;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.JTextArea;

import javax.swing.JScrollPane;

import javax.swing.JComboBox;

import javax.swing.JOptionPane;

import javax.swing.ImageIcon;

import java.awt.CardLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.Color;

//Importamos a las clases que se encuentran en otros paquetes

import Biblioteca.Clases.ArregloDeDocumentos;

//Declaracin de la clase 'jpanMantenimientoDocumento' que hereda de un 'jpanFondo'

//e implementa a la interface 'ActionListener'

public abstract class jpanMantenimientoDocumento extends jpanFondo implements ActionListener{

//Declaracin de Atributos

//Declaracin de componentes grficos swing para crear la GUI

protected JToolBar jtoobBarra;

protected JButton jbtnNuevo, jbtnGrabar, jbtnMostrar, jbtnActivar, jbtnInactivar;

protected JButton jbtnSalir;

protected JLabel jlblCabecera, jlblCodigo, jlblTitulo, jlblDescripcion;

protected JLabel jlblAutor, jlblAo, jlblFecha, jlblCantidad, jlblEstado, jlblImagenEstado;

protected JTextField jtxfCodigo, jtxfTitulo, jtxfAutor;

protected JTextField jtxfAo, jtxfFecha, jtxfCantidad, jtxfEstado;

protected JTextArea jtxaDescripcion;

protected JScrollPane jscrpanDescripcion;

//Declaracin del objeto que referenciar al objeto 'jpanelFondo' creado

//en la clase 'jfrmPrincipal'

protected jpanFondo jpanelFondo;

//Declaramos un atributo que guarde el tipo de Documento

//pude ser LIBRO, REVISTA, TESIS

protected String tipoDocumento;

protected ArregloDeDocumentos arregloRelacionado;

//Constructor por defecto

public jpanMantenimientoDocumento(){

}

//Este es el mtodo constructor por parmetro

//le llega por parmetro la referencia de un objeto de tipo 'jpanFondo', el

//tipo de documento, y 'ArregloDeDocumentos'

//luego invoca o llama al mtodo 'iniciarComponentes()'

public jpanMantenimientoDocumento(jpanFondo jpanelFondo,

String tipoDocumento,

ArregloDeDocumentos arreglo){

this.jpanelFondo = jpanelFondo;

this.tipoDocumento = tipoDocumento;

this.arregloRelacionado = arreglo;

iniciarComponentes();

}

//Este mtodo instancia los objetos o componentes grficos

//que se van a mostrar dentro del JPanel (lienzo)

public void iniciarComponentes(){

//Indicamos que el Administrador de Diseo sea nulo

this.setLayout(null);

//Instanciamos la barra de herramientas llamada 'jtoobBarra'

//Indicamos su posicin y tamao, color y que no tenga Adm. de Diseo

jtoobBarra = new JToolBar();

jtoobBarra.setBounds(0,0,800,40);

jtoobBarra.setBackground(new Color(70,130,180));

jtoobBarra.setLayout(null);

//Instanciamos un botn llamado 'jbtnNuevo'

//Indicamos que muestre una imagen

//Indicamos su posicin y tamao

//Indicamos que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jbtnNuevo = new JButton("Nuevo");

jbtnNuevo.setIcon(new ImageIcon(rutaDeImagenes+"nuevo.gif"));

jbtnNuevo.setBounds(0,0,119,40);

jbtnNuevo.addActionListener(this);

//Instanciamos un botn llamado 'jbtnGrabar'

//Indicamos que muestre una imagen

//Indicamos su posicin y tamao

//Indicamos que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jbtnGrabar = new JButton("Grabar");

jbtnGrabar.setIcon(new ImageIcon(rutaDeImagenes+"grabar.gif"));

jbtnGrabar.setBounds(120,0,119,40);

jbtnGrabar.addActionListener(this);

//Instanciamos un botn llamado 'jbtnMostrar'

//Indicamos que muestre una imagen

//Indicamos su posicin y tamao

//Indicamos que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jbtnMostrar = new JButton("Mostrar");

jbtnMostrar.setIcon(new ImageIcon(rutaDeImagenes+"mostrar.gif"));

jbtnMostrar.setBounds(240,0,119,40);

jbtnMostrar.addActionListener(this);

//Instanciamos un botn llamado 'jbtnActivar'

//Indicamos que muestre una imagen

//Indicamos su posicin y tamao

//Indicamos que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jbtnActivar = new JButton("Activar");

jbtnActivar.setIcon(new ImageIcon(rutaDeImagenes+"check.gif"));

jbtnActivar.setBounds(360,0,119,40);

jbtnActivar.addActionListener(this);

//Instanciamos un botn llamado 'jbtnInactivar'

//Indicamos que muestre una imagen

//Indicamos su posicin y tamao

//Indicamos que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jbtnInactivar = new JButton("Inactivar");

jbtnInactivar.setIcon(new ImageIcon(rutaDeImagenes+"uncheck.gif"));

jbtnInactivar.setBounds(480,0,119,40);

jbtnInactivar.addActionListener(this);

//Instanciamos un botn llamado 'jbtnSalir'

//Indicamos que muestre una imagen

//Indicamos su posicin y tamao

//Indicamos que tenga la propiedad de escuchar

//los eventos que se originan sobre l

jbtnSalir = new JButton("Salir");

jbtnSalir.setIcon(new ImageIcon(rutaDeImagenes+"salir.jpg"));

jbtnSalir.setBounds(600,0,119,40);

jbtnSalir.addActionListener(this);

//Aadimos cada botn a la barra de herramientas

jtoobBarra.add(jbtnNuevo);

jtoobBarra.add(jbtnGrabar);

jtoobBarra.add(jbtnMostrar);

jtoobBarra.add(jbtnActivar);

jtoobBarra.add(jbtnInactivar);

jtoobBarra.add(jbtnSalir);

//Aadimos la barra de herramientas al JPanel 'jpanMantenimientoDocumento'

this.add(jtoobBarra);

//********************************************************

//Creamos la GUI para el registro de datos de un Documento

//********************************************************

//Instanciamos objetos de tipo JLabel (etiqueta), JTextField (caja de texto),

//JTextArea (Area de texto) y JScrollPane

//Indicamos el texto a mostrar

//Indicamos la posicin y tamao de cada componente grfico dentro del JPanel

jlblCabecera = new JLabel("Mantenimiento de " + tipoDocumento);

jlblCabecera.setBounds(250,110,200,20);

jlblCodigo = new JLabel("Cdigo:");

jlblCodigo.setBounds(250,140,100,20);

jlblTitulo = new JLabel("Ttulo:");

jlblTitulo.setBounds(250,170,100,20);

jlblDescripcion = new JLabel("Descripcin:");

jlblDescripcion.setBounds(250,200,100,60);

jlblAutor = new JLabel("Autor:");

jlblAutor.setBounds(250,270,100,20);

jlblAo = new JLabel("Ao:");

jlblAo.setBounds(250,300,100,20);

jlblFecha = new JLabel("Fecha:");

jlblFecha.setBounds(250,330,100,20);

jlblCantidad = new JLabel("Cantidad:");

jlblCantidad.setBounds(250,360,100,20);

jlblEstado = new JLabel("Estado:");

jlblEstado.setBounds(250,390,100,20);

jtxfCodigo = new JTextField();

jtxfCodigo.setBounds(350,140,100,20);

jtxfTitulo = new JTextField();

jtxfTitulo.setBounds(350,170,100,20);

jtxaDescripcion = new JTextArea();

jscrpanDescripcion = new JScrollPane( jtxaDescripcion );

jscrpanDescripcion.setBounds(350,200,200,60);

jtxfAutor = new JTextField();

jtxfAutor.setBounds(350,270,100,20);

jtxfAo = new JTextField();

jtxfAo.setBounds(350,300,100,20);

jtxfFecha = new JTextField();

jtxfFecha.setBounds(350,330,100,20);

jtxfCantidad = new JTextField();

jtxfCantidad.setBounds(350,360,100,20);

jlblImagenEstado = new JLabel("Activo");

jlblImagenEstado.setIcon(new ImageIcon(rutaDeImagenes+"check.gif"));

jlblImagenEstado.setBounds(350,390,100,20);

//Aadimos cada componente grfico swing dentro del JPanel

this.add(jlblCabecera);

this.add(jlblCodigo);

this.add(jlblTitulo);

this.add(jlblDescripcion);

this.add(jlblAutor);

this.add(jlblAo);

this.add(jlblFecha);

this.add(jlblCantidad);

this.add(jlblEstado);

this.add(jtxfCodigo);

this.add(jtxfTitulo);

this.add(jscrpanDescripcion);

this.add(jtxfAutor);

this.add(jtxfAo);

this.add(jtxfFecha);

this.add(jtxfCantidad);

this.add(jlblImagenEstado);

}

//Este mtodo colocar una cadena vaca a cada componente grfico

//con esto logramos limpiar los datos ingresados y asi poder

//ingresar nuevos datos

public void limpiarFormulario(){

jtxfCodigo.setText("");

jtxfTitulo.setText("");

jtxaDescripcion.setText("");

jtxfAutor.setText("");

jtxfAo.setText("");

jtxfFecha.setText("");

jtxfCantidad.setText("");

jlblImagenEstado.setIcon(new ImageIcon(rutaDeImagenes+"check.gif"));

}

//Este mtodo valida si el usuario ha ingresado algun dato en la caja de texto

//correspondiente al cdigo, este mtodo es importante, porque todas las

//opereaciones necesitan que se ingrese el dato en la caja CODIGO

public boolean validarIngresoDelCampoCodigoDelFormulario(){

if(jtxfCodigo.getText().trim().length()==0){

JOptionPane.showMessageDialog(null,"Ingrese el cdigo.",

"Validando el Formulario",

JOptionPane.WARNING_MESSAGE);

return false;

}

return true;

}

//Este mtodo valida cada componente grfico swing, verifica si algun componente

//esta vacio, si es asi, mostrar un mensaje indicando que se ingrese el dato

//si todo est lleno se devolver el valor de 'true'

//si algn componente no est lleno se devolver el valor de 'false'

public boolean validarDatosDelFormulario(){

boolean valor = true;

String mensaje = "mensaje";

if(jtxfCodigo.getText().trim().length()==0){

mensaje = "Ingrese el cdigo.";

valor = false;

}else if(jtxfTitulo.getText().trim().length()==0){

mensaje = "Ingrese el ttulo.";

valor = false;

}else if(jtxaDescripcion.getText().trim().length()==0){

mensaje = "Ingrese la descripcin.";

valor = false;

}else if(jtxfAutor.getText().trim().length()==0){

mensaje = "Ingrese el autor.";

valor = false;

}else if(jtxfAo.getText().trim().length()==0){

mensaje = "Ingrese el ao.";

valor = false;

}else if(jtxfFecha.getText().trim().length()==0){

mensaje = "Ingrese la fecha.";

valor = false;

}else if(jtxfCantidad.getText().trim().length()==0){

mensaje = "Ingrese la cantidad.";

valor = false;

}

if(!valor){

JOptionPane.showMessageDialog(null,

mensaje,"Validando el Formulario",

JOptionPane.WARNING_MESSAGE);

}

return valor;

}

//Este mtodo detecta los eventos de tipo ACTION generados en los componentes

//grficos swing. Siempre y cuando dichos componentes tengan habilitado su

//propiedad 'addActionListener(this)'

public void actionPerformed(ActionEvent e){

if(e.getSource() == jbtnNuevo){

limpiarFormulario();

}

if(e.getSource() == jbtnGrabar){

accionDelBotonGrabar();

}

if(e.getSource() == jbtnMostrar){

accionDelBotonMostrar();

}

if(e.getSource() == jbtnActivar){

accionDelBotonActivar();

}

if(e.getSource() == jbtnInactivar){

accionDelBotonInactivar();

}

if(e.getSource() == jbtnSalir){

//Cambiamos de 'JPanel', ahora mostramos a 'jpanInicio'

((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"inicio" );

}

}

//****************************************************************

//Estos mtodos se invocarn cuando se haga clic sobre los botones

//de la barra de herramientas

//OBSERVACION:

//Es cdigo interno de cada mtodo, ser implementada por las clases HIJAS

//por que se est invocando a un MTODO ABSTRACTO, y como es bien

//conocido, las clases HIJAS son las encargadas de implementar a cada

//MTODO ABSTRACTO defino en la clase PADRE.

public void accionDelBotonGrabar(){

if(validarDatosDelFormulario()){

grabarDocumento(); //MTODO ABSTRACTO

limpiarFormulario();

}

}

public void accionDelBotonMostrar(){

if(validarIngresoDelCampoCodigoDelFormulario()){

mostrarDocumento(); //MTODO ABSTRACTO

}

}

public void accionDelBotonActivar(){

if(validarIngresoDelCampoCodigoDelFormulario()){

activarDocumento(); //MTODO ABSTRACTO

}

}

public void accionDelBotonInactivar(){

if(validarIngresoDelCampoCodigoDelFormulario()){

inactivarDocumento(); //MTODO ABSTRACTO

}

}

//****************************************************************

//Declaracin de los MTODOS ABSTRACTOS

public abstract void grabarDocumento();

public abstract void mostrarDocumento();

public abstract void activarDocumento();

public abstract void inactivarDocumento();

}

jpanMantenimientoLibro

A continuacin se presenta a la clase hija jpanMantenimientoLibro, que hereda de la clase jpanMantenimientoDocumento. Esta clase se utiliza para crear el panel para el registro de un Nuevo Libro.

Este panel HEREDA el diseo un formulario tpico de Mantenimiento, el cual tiene una barra de herramientas con botones que realizan las operaciones de (1) Nuevo, (2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.

Este panel hereda todos los atributos y mtodos de su clase Padre.

Esta clase jpanMantenimientoLibro implementa los 4 mtodos abstractos definidos en la clase Padre:

public void grabarDocumento(){ }public void mostrarDocumento(){ }public void activarDocumento(){ }public void inactivarDocumento(){ }Estos mtodos son IMPLEMENTADOS OBLIGATORIAMENTE en esta clase.

Pasos a seguir 11:

21. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

22. Generar el archivo jpanMantenimientoLibro.class (Proceso de Compilacin)

La clase jpanMantenimientoLibro

//Declaracin del nombre del paquete donde se encuentra la clase 'jpanMantenimientoLibro'

package Biblioteca.Formularios;

//Declaramos las librerias del Java que necesitamos usar

import java.util.Date;

import java.util.ArrayList;

import javax.swing.JOptionPane;

import javax.swing.ImageIcon;

//Importamos a las clases que se encuentran en otros paquetes

import ClasesBase.Base;

import Biblioteca.Clases.ArregloDeDocumentos;

import Biblioteca.Clases.Documento;

import Biblioteca.Clases.Libro;

//Declaracin de la clase 'jpanMantenimientoLibro'

//que hereda de un 'jpanMantenimientoDocumento'

public class jpanMantenimientoLibro extends jpanMantenimientoDocumento{

//Este es el mtodo constructor por parmetro

//le llega por parmetro la referencia de un objeto de tipo 'jpanFondo',

//el tipo de documento, y 'arreglo'

public jpanMantenimientoLibro(jpanFondo jpanelFondo,

String tipoDocumento,

ArregloDeDocumentos arreglo){

//Pasamos por parmetro al constructor por parmetro de la clase padre

//'jpanMantenimientoDocumento'

super(jpanelFondo, tipoDocumento, arreglo);

}

//Este mtodo devuelve el indice donde se encuentra el documento con cdigo

//'codigoDocumento' y que sea de tipo 'Libro'

//Si no encuentra dicho cdigo, devuelve el valor de -1

public int devolverIndiceDelDocumentoEnElArreglo(String codigoDocumento){

ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();

int indice = -1, i;

for(i=0;i= 0){

Documento doc = (Documento)arregloAuxiliar.get(indice);

cargarDatosDelLibroEnElFormulario((Libro)doc);

JOptionPane.showMessageDialog(null,"Libro encontrado.",

"Mostrar Libro",JOptionPane.INFORMATION_MESSAGE);

}else{

JOptionPane.showMessageDialog(null,"No existe el cdigo ingresado.",

"Mostrar Libro",JOptionPane.WARNING_MESSAGE);

}

}

//Este mtodo actualiza el atributo estado del libro a 'true'

//Primero verifica que si existe el libro

//Luego modifica el atributo 'estado' del libro

//Finalmente lo aade en su mismo indice dentro arreglo de documentos

//Si No existe el codigo ingresado, se mostrar un mensaje

//Si el valor del atributo estado es 'true', se mostrar un mensaje

public void activarDocumento(){

ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();

String codigoDocumento = jtxfCodigo.getText().trim();

int indice = devolverIndiceDelDocumentoEnElArreglo(codigoDocumento);

if(indice >= 0){

Documento doc = (Documento)arregloAuxiliar.get(indice);

Libro libro = (Libro)doc;

if(libro.getEstado()){

JOptionPane.showMessageDialog(null,"Libro YA estaba activado.",

"Inactivar Libro",JOptionPane.WARNING_MESSAGE);

}else{

libro.setEstado(true);

arregloRelacionado.insertaDocumentoPorIndice(indice,libro);

cargarDatosDelLibroEnElFormulario(libro);

JOptionPane.showMessageDialog(null,"Libro activado.",

"Activar Libro",JOptionPane.INFORMATION_MESSAGE);

}

}else{

JOptionPane.showMessageDialog(null,"No existe el cdigo ingresado.",

"Activar Libro",JOptionPane.WARNING_MESSAGE);

}

}

//Este mtodo actualiza el atributo estado del libro a 'false'

//Primero verifica que si existe el libro

//Luego modifica el atributo 'estado' del libro

//Finalmente lo aade en su mismo indice dentro arreglo de documentos

//Si No existe el codigo ingresado, se mostrar un mensaje

//Si el valor del atributo estado es 'false', se mostrar un mensaje

public void inactivarDocumento(){

ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();

String codigoDocumento = jtxfCodigo.getText().trim();

int indice = devolverIndiceDelDocumentoEnElArreglo(codigoDocumento);

if(indice >= 0){

Documento doc = (Documento)arregloAuxiliar.get(indice);

Libro libro = (Libro)doc;

if(libro.getEstado()){

libro.setEstado(false);

arregloRelacionado.insertaDocumentoPorIndice(indice,libro);

cargarDatosDelLibroEnElFormulario(libro);

JOptionPane.showMessageDialog(null,"Libro inactivado.",

"Inactivar Libro",JOptionPane.INFORMATION_MESSAGE);

}else{

JOptionPane.showMessageDialog(null,"Libro YA estaba inactivado.",

"Inactivar Libro",JOptionPane.WARNING_MESSAGE);

}

}else{

JOptionPane.showMessageDialog(null,"No existe el cdigo ingresado.",

"Inactivar Libro",JOptionPane.WARNING_MESSAGE);

}

}

}

jpanMantenimientoRevista

A continuacin se presenta a la clase hija jpanMantenimientoRevista, que hereda de la clase jpanMantenimientoDocumento. Esta clase se utiliza para crear el panel para el registro de una Nueva Revista.

Este panel HEREDA el diseo un formulario tpico de Mantenimiento, el cual tiene una barra de herramientas con botones que realizan las operaciones de (1) Nuevo, (2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.

Este panel hereda todos los atributos y mtodos de su clase Padre.

Esta clase jpanMantenimientoRevista implementa los 4 mtodos abstractos definidos en la clase Padre:

public void grabarDocumento(){ }public void mostrarDocumento(){ }public void activarDocumento(){ }public void inactivarDocumento(){ }Estos mtodos son IMPLEMENTADOS OBLIGATORIAMENTE en esta clase.

Pasos a seguir 12:

23. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

24. Generar el archivo jpanMantenimientoRevista.class (Proceso de Compilacin)

La clase jpanMantenimientoRevista

package Biblioteca.Formularios;

import Biblioteca.Clases.ArregloDeDocumentos;

public class jpanMantenimientoRevista extends jpanMantenimientoDocumento{

public jpanMantenimientoRevista(jpanFondo jpanelFondo,

String tipoDocumento,

ArregloDeDocumentos arreglo){

super(jpanelFondo, tipoDocumento, arreglo);

}

public void grabarDocumento(){

}

public void mostrarDocumento(){

}

public void activarDocumento(){

}

public void inactivarDocumento(){

}

}

jpanMantenimientoTesis

A continuacin se presenta a la clase hija jpanMantenimientoTesis, que hereda de la clase jpanMantenimientoDocumento. Esta clase se utiliza para crear el panel para el registro de una Nueva Tesis.

Este panel HEREDA el diseo un formulario tpico de Mantenimiento, el cual tiene una barra de herramientas con botones que realizan las operaciones de (1) Nuevo, (2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.

Este panel hereda todos los atributos y mtodos de su clase Padre.

Esta clase jpanMantenimientoTesis implementa los 4 mtodos abstractos definidos en la clase Padre:

public void grabarDocumento(){ }public void mostrarDocumento(){ }public void activarDocumento(){ }public void inactivarDocumento(){ }Estos mtodos son IMPLEMENTADOS OBLIGATORIAMENTE en esta clase.

Pasos a seguir 13:

25. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

26. Generar el archivo jpanMantenimientoTesis.class (Proceso de Compilacin)

La clase jpanMantenimientoTesis

package Biblioteca.Formularios;

import Biblioteca.Clases.ArregloDeDocumentos;

public class jpanMantenimientoTesis extends jpanMantenimientoDocumento{

public jpanMantenimientoTesis(jpanFondo jpanelFondo,

String tipoDocumento,

ArregloDeDocumentos arreglo){

super(jpanelFondo, tipoDocumento, arreglo);

}

public void grabarDocumento(){

}

public void mostrarDocumento(){

}

public void activarDocumento(){

}

public void inactivarDocumento(){

}

}

jfrmPrincipal

A continuacin se presenta a la clase jfrmPrincipal, que hereda de la clase Jrame (javax.swing.JFrame). Esta clase se utiliza para crear el formulario principal del sistema.

Esta clase jfrmPrincipal se van a agregar los dems paneles (formularios) que se han diseado para usarse en el sistema.Esta clase jfrmPrincipal tiene al mtodo main. Por lo tanto, es en clase, donde tenemos que ejecutar el sistema (Proceso de Ejecucin - RUN)

Pasos a seguir 14:

27. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

28. Generar el archivo jfrmPrincipal.class (Proceso de Compilacin)

La clase jfrmPrincipal

//Declaramos el nombre del paquete donde se encuentra la clase 'jfrmPrincipal'

package Biblioteca.Formularios;

//Declaramos las librerias del Java que necesitamos usar

import javax.swing.JFrame;

import java.awt.Dimension;

import java.awt.Toolkit;

import java.awt.CardLayout;

//Importamos la clase 'ArregloDeDocumentos', que se encuentra en otro paquete

import Biblioteca.Clases.ArregloDeDocumentos;

//Declaracin de la clase 'jfrmPrincipal' que hereda de un 'JFrame'

public class jfrmPrincipal extends JFrame{

//Declaracin de Atributos

//Declaracin de componentes grficos swing para crear la GUI

private jpanFondo jpanelFondo;

private jpanBarraDeMenu jpanelBarra;

private jpanInicio jpanelInicio;

private jpanValidarUsuario jpanelValidarUsuario;

private jpanMantenimientoLibro jpanelMantLibro;

private jpanMantenimientoRevista jpanelMantRevista;

private jpanMantenimientoTesis jpanelMantTesis;

//Declaracin del objeto que referenciar a la zona de memoria donde se

//est guardando los objetos de tipo Documento

private ArregloDeDocumentos arregloRelacionado;

//Este es el mtodo constructor por parmetro

//le llega por parmetro la referencia de un objeto de tipo 'ArregloDeDocumentos'

//luego invoca o llama al mtodo 'iniciarComponentes()'

public jfrmPrincipal(ArregloDeDocumentos arreglo){

//Referenciamos al objeto creado en el mtodo 'main'

this.arregloRelacionado = arreglo;

iniciarComponentes();

}

//Este mtodo instancia los objetos o componentes grficos

//que se van a mostrar dentro del JFrame (marco o contorno)

public void iniciarComponentes(){

//Indicamos el ttulo del formulario

this.setTitle("Sistema de Biblioteca");

//Indicamos el tamao del formulario

this.setSize(800,600);

//Desactivamos el boton Maximizar

this.setResizable(false);

//Llamamos al mtodo que centra la ventana 'jfrmPrincipal'

centrarVentana();

//Indicamos que no tenga Administrador de Diseo

this.setLayout(null);

//Instanciamos el JPanel 'jpanelFondo'

jpanelFondo = new jpanFondo();

//Indicamos la posicin y tamao que tendr dentro del formulario

jpanelFondo.setBounds(0,50,800,550);

//Indicamos que el Administrador de Diseo del JPanel 'jpanelFondo' sea

//de tipo 'CardLayout'. Lo que significa que va a contener a otros JPanel

//Es decir se van a colocar cada JPanel tras otro JPanel, como si fueran Naipes

jpanelFondo.setLayout(new CardLayout());

//Instanciamos al 'JPanel' que contendr a la Barra de Menu

//Enviamos por parmetro la REFERENCIA del JPanel 'jpanelFondo'

//para que dentro de la clase 'jpanelBarra' se pueda invocar a 'jpanelFondo'

jpanelBarra = new jpanBarraDeMenu(jpanelFondo);

jpanelBarra.setBounds(0,0,800,50);

//Instanciamos al 'JPanel' que mostrar dos imgenes

jpanelInicio = new jpanInicio();

jpanelInicio.setBounds(0,0,800,600);

//Instanciamos al 'JPanel' que validar el ingreso de un nuevo usuario

//Enviamos por parmetro la REFERENCIA del JPanel 'jpanelBarra' y 'jpanelFondo'

//para que dentro de la clase 'jpanelValidarUsuario' se pueda invocar a los

//mtodos de 'jpanelBarra' y 'jpanelFondo'

jpanelValidarUsuario = new jpanValidarUsuario(jpanelBarra,jpanelFondo);

jpanelValidarUsuario.setBounds(0,0,800,600);

//Instanciamos al 'JPanel' que registrar el ingreso de un nuevo libro

//Enviamos por parmetro la REFERENCIA del JPanel 'jpanelFondo' y 'arregloRelacionado'

//para que dentro de la clase 'jpanelMantLibro' se pueda invocar a los

//mtodos de 'jpanelFondo' y 'arregloRelacionado'

jpanelMantLibro = new jpanMantenimientoLibro(jpanelFondo,"Libro",arregloRelacionado);

jpanelMantLibro.setBounds(0,0,800,600);

//PARA IMPLEMENTAR...

//Instanciamos al 'JPanel' que registrar el ingreso de una nueva revista

//Enviamos por parmetro la REFERENCIA del JPanel 'jpanelFondo' y 'arregloRelacionado'

//para que dentro de la clase 'jpanelMantRevista' se pueda invocar a los

//mtodos de 'jpanelFondo' y 'arregloRelacionado'

jpanelMantRevista = new jpanMantenimientoRevista(jpanelFondo,"Revista",arregloRelacionado);

jpanelMantRevista.setBounds(0,0,800,600);

//PARA IMPLEMENTAR...

//Instanciamos al 'JPanel' que registrar el ingreso de una nueva revista

//Enviamos por parmetro la REFERENCIA del JPanel 'jpanelFondo' y 'arregloRelacionado'

//para que dentro de la clase 'jpanelMantTesis' se pueda invocar a los

//mtodos de 'jpanelFondo' y 'arregloRelacionado'

jpanelMantTesis = new jpanMantenimientoTesis(jpanelFondo,"Tesis",arregloRelacionado);

jpanelMantTesis.setBounds(0,0,800,600);

//Aadimos cada JPanel al 'jpanelFondo'

//Aca funciona el CardLayout, el cual colocar a ca JPanel uno tras otro

//Es decir primero estar 'jpanelInicio' y tras este estar 'jpanelValidarUsuario'

//y asi sucesivamente, el ltimo en colocarse es 'jpanelMantTesis'

jpanelFondo.add("inicio", jpanelInicio);

jpanelFondo.add("usuario", jpanelValidarUsuario);

jpanelFondo.add("libro", jpanelMantLibro);

jpanelFondo.add("revista", jpanelMantRevista);

jpanelFondo.add("tesis", jpanelMantTesis);

//Aadimos al JPanel 'jpanelBarra' y 'jpanelFondo' dentro del formulario

this.add(jpanelBarra);

this.add(jpanelFondo);

//Indicamos que al cerrar la ventana, se detengan todos los procesos

//iniciados para esta ventana

this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

}

//Este mtodo permite centrar la ventana en la pantalla del Monitor

public void centrarVentana(){

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = this.getSize();

int x = (screenSize.width - frameSize.width)/2;

int y = (screenSize.height - frameSize.height)/2;

this.setLocation(x,y);

}

//Mtodo main

//Aqu instanciamos al objeto que almacenar a todos los Documentos de mi biblioteca

//Enviamos por referencia dicho objeto 'arreglo' para que pueda ser usado

//dentro de la GUI

//Recordar que la informacin debe estar SEPARADA de la GUI (Interface Grfica de Usuario)

public static void main(String[] args) {

ArregloDeDocumentos arreglo = new ArregloDeDocumentos();

new jfrmPrincipal(arreglo).setVisible(true);

}

}

TAREA

1. Se pide implementar los mtodos de las clases: (1) jpanMantenimientoRevista y (2) jpanMantenimientoTesis. De tal manera que funcionen las opciones de la barra de men para Revista y Tesis. Es decir implementar las opciones: Nuevo, Grabar, Mostrar, Activar, Inactivar y Salir, para la Revista y Tesis.2. Se pide crear la clase Persona, que declare los atributos y mtodos generales de toda persona. Luego crear las clases hijas Alumno y Profesor, que heredan de Persona. Adems crear una clase llamada ArregloDePersonas, que se utilice para almacenar objetos de tipo Persona (que puede ser Alumno o Profesor), se recomienda guiarse de la clase ArregloDeDocumentos.

3. Se pide implementar el formulario de mantenimiento (JPanel) jpanMatenimientoPersona, que disee la interface grfica de usuario (GUI) para el registro de una Persona. Se recomienda guiarse de la clase jpanMantenimientoDocumento. Luego se pide crear las clases hijas jpanMantenimientoAlumno y jpanMantenimientoProfesor que implementen los mtodos propios del registro de un Alumno y Profesor respectivamente. Se recomienda guiarse de la clase jpanMantenimientoLibro.4. Se pide adicionar un nuevo JMenu dentro de la barra de men llamada jmnbBarra. Este nuevo JMenu ser etiquetado como Registro. Luego se pide crear 2 JMenuItem, uno etiquetado como Alumno y otro etiquetado como Profesor. Finalmente se pide implementar los eventos necesarios para invocar a los formularios jpanMantenimientoAlumno y jpanMantenimientoProfesor respectivamente desde la barra de men.

Nota: Se pide seguir los estndares de programacin empleados. Por ejemplo:

Utilizar acrnimos (jlbl, jtxf, jtxa, etc.) antes de los nombres de las variables. Escribir el nombre de los mtodos lo ms descriptible posible, como: validarIngresoDelCampoCodigoDelFormulario()

Utilizar referencias en vez de instanciar objetos, cuando sea posible.

Reutilizar clases creadas en las Guas de Laboratorio anteriores, cumplir con el principio de NO REINVENTAR LA RUEDA.

JPanel

JMenuItem

JMenu

JMenuBar

JPanel

JPanel

Prof. Arn Elas Herrera PontePg. 33