Вы находитесь на странице: 1из 34

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)

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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) {
Prof. Arn Elas Herrera Ponte

Pg. 2

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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)

Prof. Arn Elas Herrera Ponte

Pg. 3

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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;

Prof. Arn Elas Herrera Ponte

Pg. 4

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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){
Prof. Arn Elas Herrera Ponte

Pg. 5

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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.

JPanel

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;
Prof. Arn Elas Herrera Ponte

Pg. 6

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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'.

Prof. Arn Elas Herrera Ponte

Pg. 7

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

JPanel

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
Prof. Arn Elas Herrera Ponte

Pg. 8

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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'.
JMenuBar

JMenu

Prof. Arn Elas Herrera Ponte

Pg. 9

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

JMenuItem

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
Prof. Arn Elas Herrera Ponte

Pg. 10

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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 un
item 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 un
item 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");
Prof. Arn Elas Herrera Ponte

Pg. 11

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//Instanciamos a un
item 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 un
item 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 un
item 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){
Prof. Arn Elas Herrera Ponte

Pg. 12

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java


//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'.

JPanel

Pasos a seguir 9:
Prof. Arn Elas Herrera Ponte

Pg. 13

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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
//***************************************************
Prof. Arn Elas Herrera Ponte

Pg. 14

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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

Prof. Arn Elas Herrera Ponte

Pg. 15

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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
public
public
public

abstract
abstract
abstract
abstract

void
void
void
void

grabarDocumento();
mostrarDocumento();
activarDocumento();
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'
Prof. Arn Elas Herrera Ponte

Pg. 16

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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);
Prof. Arn Elas Herrera Ponte

Pg. 17

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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);
Prof. Arn Elas Herrera Ponte

Pg. 18

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//********************************************************
//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);
Prof. Arn Elas Herrera Ponte

Pg. 19

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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;
Prof. Arn Elas Herrera Ponte

Pg. 20

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

}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(){
Prof. Arn Elas Herrera Ponte

Pg. 21

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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
public
public
public

void
void
void
void

grabarDocumento(){ }
mostrarDocumento(){ }
activarDocumento(){ }
inactivarDocumento(){ }

Estos mtodos son IMPLEMENTADOS OBLIGATORIAMENTE en esta clase.

Prof. Arn Elas Herrera Ponte

Pg. 22

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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,
Prof. Arn Elas Herrera Ponte

Pg. 23

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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<arregloAuxiliar.size();i++){
Documento doc = (Documento)arregloAuxiliar.get(i);
if(doc instanceof Libro){
if(doc.getCodigo().equals(codigoDocumento)){
indice = i;
break;
}
}
}
return indice;
}
//Este mtodo registra los datos de un nuevo libro
//Por ello instancia un objeto de tipo libro y le va asignando sus datos
//utiliza a sus mtodos de tipo SET
//luego se devuelve la referencia a este objeto instanciado
public Libro registrarNuevoLibro(){
Libro libro = new Libro();
libro.setCodigo(jtxfCodigo.getText().trim());
libro.setTitulo(jtxfTitulo.getText().trim());
libro.setDescripcion(jtxaDescripcion.getText().trim());
libro.setAutor(jtxfAutor.getText().trim());
libro.setAo(Base.aEntero(jtxfAo.getText().trim()));
try{
libro.setFecha(new Date(jtxfFecha.getText().trim()));
}catch(Exception e){
libro.setFecha(new Date());
}
libro.setCantidad(Base.aEntero(jtxfCantidad.getText().trim()));
libro.setEstado(true);
return libro;
}
//Este mtodo carga el valor de los atributos de un objeto de tipo 'Libro'
//los muestra en los componentes grficos del JPanel
public void cargarDatosDelLibroEnElFormulario(Libro libro){
jtxfTitulo.setText(libro.getTitulo());
jtxaDescripcion.setText(libro.getDescripcion());
jtxfAutor.setText(libro.getAutor());
jtxfAo.setText(""+libro.getAo());
jtxfFecha.setText(libro.getFecha().toString());
jtxfCantidad.setText(""+libro.getCantidad());
if(libro.getEstado()){
jlblImagenEstado.setIcon(new ImageIcon(rutaDeImagenes+"check.gif"));
jlblImagenEstado.setText("Activo");
}else{
Prof. Arn Elas Herrera Ponte

Pg. 24

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java


jlblImagenEstado.setIcon(new ImageIcon(rutaDeImagenes+"uncheck.gif"));
jlblImagenEstado.setText("Inactivo");

}
}
//Este mtodo Graba los datos ingresados de un nuevo libro
//Primero verifica que no exista otro libro con el mismo cdigo
//Luego registra los datos del nuevo libro
//Finalmente lo aade al arreglo de documentos
//Si ya existe el codigo, mostrar un mensaje
public void grabarDocumento(){
String codigoDocumento = jtxfCodigo.getText().trim();
if(devolverIndiceDelDocumentoEnElArreglo(codigoDocumento) < 0){
arregloRelacionado.aadeDocumento( registrarNuevoLibro() );
JOptionPane.showMessageDialog(null,"Operacin realizada con xito.",
"Grabar Libro",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"El cdigo YA existe, ingrese un nuevo cdigo.",
"Grabar Libro",JOptionPane.WARNING_MESSAGE);
}
}
//Este mtodo muestra los datos de un objeto de tipo libro
//Para lo cual, primero busca si se encuentra dicho libro,
//lo hace comparando con el cdigo ingresado
//Si el cdigo Si existe, se invoca al metod 'cargarDatosDelLibroEnElFormulario'
//Si el cdigo No existe se mostrar un mensaje
public void mostrarDocumento(){
ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();
String codigoDocumento = jtxfCodigo.getText().trim();
int indice = devolverIndiceDelDocumentoEnElArreglo(codigoDocumento);
if(indice >= 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{
Prof. Arn Elas Herrera Ponte

Pg. 25

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java


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.

Prof. Arn Elas Herrera Ponte

Pg. 26

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

Esta clase jpanMantenimientoRevista implementa los 4 mtodos abstractos


definidos en la clase Padre:

public
public
public
public

void
void
void
void

grabarDocumento(){ }
mostrarDocumento(){ }
activarDocumento(){ }
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(){
Prof. Arn Elas Herrera Ponte

Pg. 27

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

}
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
public
public
public

void
void
void
void

grabarDocumento(){ }
mostrarDocumento(){ }
activarDocumento(){ }
inactivarDocumento(){ }

Estos mtodos son IMPLEMENTADOS OBLIGATORIAMENTE en esta clase.

Prof. Arn Elas Herrera Ponte

Pg. 28

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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)

Prof. Arn Elas Herrera Ponte

Pg. 29

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

Pasos a seguir 14:


Prof. Arn Elas Herrera Ponte

Pg. 30

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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'
Prof. Arn Elas Herrera Ponte

Pg. 31

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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);
Prof. Arn Elas Herrera Ponte

Pg. 32

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

//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.

Prof. Arn Elas Herrera Ponte

Pg. 33

Algortmica II

Gua F de Laboratorio Herencia, Clases Abstractas e Interface Java

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.

Prof. Arn Elas Herrera Ponte

Pg. 34