Académique Documents
Professionnel Documents
Culture Documents
GUIA G DE LABORATORIO
HERENCIA CLASES ABSTRACTAS INTERFACE
POLIMORFISMO
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.
Aplicar la definicin de Polimorfismo.
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 Persona, Profesor, Alumno y Universidad. El objetivo es comprender como
se relacionan estas clases, especialmente como funciona el mecanismo del
Polimorfismo.
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 y se relacionan 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. Debo mencionar que uno de los objetivos de esta gua de
laboratorio es aprender a usar JTable, JTree, JSplitPane, JPopupMenu y sus dems
clases auxiliares. 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 que se le pide al final de la gua, en la seccin denominada TAREA.
PAQUETE ClasesBase
Base
A continuacin se presenta la clase Base, que define varios mtodos de carcter
esttico. En esta ocasin se ha agregado DOS (2) nuevos mtodos a la clase base:
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Paso a seguir 1:
1. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
2. Generar el archivo Base.class (Proceso de Compilacin)
La clase Base
/**
* Clase de Apoyo llamada Base.
* @version 1.0, 09/09/08
* @author Arn Elas Herrera Ponte
*/
//Nombre del paquete que agrupa a clases Java
//de utilidad general
package ClasesBase;
//Importamos clases Java para la lectura de
//Datos por consola
import java.io.BufferedReader;
import java.io.InputStreamReader;
//Implementacin de la clase Base
public class Base {
//Implementacin del mtodo esttico "leerDato"
//se utiliza para pedir el ingreso de datos por consola
public static String leerDato(){
String dato;
try{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
dato = teclado.readLine();
}catch(Exception exception){
System.out.println("Error al momento de Leer el dato por consola.");
dato = "";
}
return dato;
}
//Este mtodo recibe por parmetro una variable 'cadena' de tipo de dato String
//Se hace uso del mtodo 'parseInt()' de la clase Integer
//Si sucede un error al momento de convertir el 'String' a 'int', se ir al bloque 'catch'
//Si todo es correcto, se retorna el entero 'dato'
public static int aEntero(String cadena){
int dato;
try{
dato = Integer.parseInt(cadena);
}catch(Exception e){
System.out.println("Error al convertir un String a Entero.");
Prof. Arn Elas Herrera Ponte
Pg. 2
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
dato = 999;
}
return dato;
}
//Este mtodo recibe por parmetro una variable 'cadena' de tipo de dato String
//Se hace uso del mtodo 'parseDouble()' de la clase Double
//Si sucede un error al momento de convertir el 'String' a 'double', se ir al bloque 'catch'
//Si todo es correcto, se retorna el double 'dato'
public static double aReal(String cadena){
double dato;
try{
dato = Double.parseDouble(cadena);
}catch(Exception e){
System.out.println("Error al convertir un String a Real.");
dato = 999;
}
return dato;
}
//Este mtodo recibve por parmetro una cadena 'mensaje', la cual se va ha imprimir
//Se hace uso del mtodo 'leerDato()'
//Se debe escribir un texto no vacio. Debido a que existe el bucle 'do-while'
//este bucle, valida si lo ingresado es vacio
//Si todo es correcto, se retorna el String 'dato'
public static String ingresarDato(String mensaje){
String dato;
do{
System.out.print(mensaje);
dato = leerDato().trim();
}while(dato.length()==0);
return dato;
}
//Mtodo que devuelve una cadena en minscula
public static String convertirCadenaAMinuscula(String sPalabra){
return sPalabra.toLowerCase();
}
//Mtodo que devuelve una cadena en mayscula
public static String convertirCadenaAMayuscula(String sPalabra){
return sPalabra.toUpperCase();
}
//Este mtodo recibe por parmetro un arreglo de String 'mensaje'
//El mtodo construye un mnu de opciones, usando el bucle 'for'
//Se pide al usuario ingresar su opcin
//Se convierte a entero dicha opcin
//Se devuelve la opcion ingresada
public static int pintarMenu(String[] mensaje){
int opcion;
do{
for(String cadena : mensaje){
System.out.println(cadena);
}
System.out.println("Ingrese su opcion:");
opcion = aEntero(leerDato());
}while(opcion<1 || opcion>mensaje.length);
return opcion;
Prof. Arn Elas Herrera Ponte
Pg. 3
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
}
//Este mtodo recibe por parmetro un nmero entero entre [0-6]
//y retornar el nombre del da como un String (cadena de caracteres)
public String retornarNombreDelDiaDeLaSemana(int dia){
String diaEnCadena = "valorInicial";
switch(dia){
case 0 : diaEnCadena = "Domingo"; break;
case 1 : diaEnCadena = "Lunes"; break;
case 2 : diaEnCadena = "Martes"; break;
case 3 : diaEnCadena = "Miercoles"; break;
case 4 : diaEnCadena = "Jueves"; break;
case 5 : diaEnCadena = "Viernes"; break;
case 6 : diaEnCadena = "Sabado"; break;
}
return diaEnCadena;
}
//Este mtodo recibe por parmetro un nmero entero entre [0-11]
//y retornar el nombre del mes como un String (cadena de caracteres)
public String retornarNombreDelMesDelAo(int mes){
String mesEnCadena = "valorInicial";
switch(mes){
case 0 : mesEnCadena = "Enero"; break;
case 1 : mesEnCadena = "Febrero"; break;
case 2 : mesEnCadena = "Marzo"; break;
case 3 : mesEnCadena = "Abril"; break;
case 4 : mesEnCadena = "Mayo"; break;
case 5 : mesEnCadena = "Junio"; break;
case 6 : mesEnCadena = "Julio"; break;
case 7 : mesEnCadena = "Agosto"; break;
case 8 : mesEnCadena = "Setiembre"; break;
case 9 : mesEnCadena = "Octubre"; break;
case 10 : mesEnCadena = "Noviembre"; break;
case 11 : mesEnCadena = "Diciembre"; break;
}
return mesEnCadena;
}
}
PAQUETE Clases
Persona
A continuacin se presenta la clase Persona, que define los atributos y mtodos
ms importantes de una persona de la vida real. Es decir, esta clase Persona define
los atributos y mtodos mas importante de un persona, obtenidos mediante el
proceso de ABSTRACCIN.
Paso a seguir 2:
3. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
4. Generar el archivo Persona.class (Proceso de Compilacin)
Pg. 4
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
La clase Persona
//Declaracin del nombre del paquete donde se encuentra la clase 'Persona'
package Clases;
//Declaracion de libreras o paquetes propias del java
import java.util.Date;
//Definimos la clase 'Persona'
public class Persona {
//Declaracin de los Atributos
protected String codigo;
protected String nombres;
protected String apellidos;
protected String categoria;
protected String sexo;
protected Date fechaDeNacimiento;
protected String foto;
//Constructor por defecto
public Persona(){
this.codigo = "1000";
this.nombres = "Juan";
this.apellidos = "Perez";
this.categoria = "Principal";
this.sexo = "Masculino";
this.fechaDeNacimiento = new Date();
this.foto = "C:\\";
}
//Mtodos de tipo SET y GET
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public void setNombres(String nombres) {
this.nombres = nombres;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public void setFechaDeNacimiento(Date fechaDeNacimiento) {
this.fechaDeNacimiento = fechaDeNacimiento;
}
public void setFoto(String foto) {
this.foto = foto;
Prof. Arn Elas Herrera Ponte
Pg. 5
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
}
public String getCodigo() {
return (this.codigo);
}
public String getNombres() {
return (this.nombres);
}
public String getApellidos() {
return (this.apellidos);
}
public String getCategoria() {
return (this.categoria);
}
public String getSexo() {
return (this.sexo);
}
public Date getFechaDeNacimiento() {
return (this.fechaDeNacimiento);
}
public String getFoto() {
return (this.foto);
}
}
Profesor
A continuacin se presenta la clase Profesor, que define los atributos y mtodos
ms importantes de un profesor de la vida real. Es decir, esta clase Profesor define
los atributos y mtodos mas importante de un profesor.
OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Profesor HEREDA los
atributos y mtodos (de mbito protegido y pblico) de la clase Persona.
Paso a seguir 3:
5. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
6. Generar el archivo Profesor.class (Proceso de Compilacin)
La clase Profesor
//Declaracin del nombre del paquete donde se encuentra la clase 'Profesor'
package Clases;
//Definimos la clase 'Profesor'
//que HEREDA de la clase 'Persona'
public class Profesor extends Persona{
Prof. Arn Elas Herrera Ponte
Pg. 6
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
}
Alumno
A continuacin se presenta la clase Alumno, que define los atributos y mtodos ms
importantes de un alumno de la vida real. Es decir, esta clase Alumno define los
atributos y mtodos ms importantes de un alumno.
OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Alumno HEREDA los
atributos y mtodos (de mbito protegido y pblico) de la clase Persona.
Paso a seguir 4:
7. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
8. Generar el archivo Alumno.class (Proceso de Compilacin)
La clase Alumno
//Declaracin del nombre del paquete donde se encuentra la clase 'Alumno'
package Clases;
//Definimos la clase 'Alumno'
//que HEREDA de la clase 'Persona'
public class Alumno extends Persona{
}
Universidad
A continuacin se presenta la clase Universidad, que define los atributos y mtodos
ms importantes de una Universidad de la vida real, por ejemplo una coleccin de
Personas. Es decir, esta clase Universidad define los atributos y mtodos ms
importantes de para poder almacenar temporalmente (en Memoria RAM) a un
conjunto de Personas (que pueden Profesores y Alumnos).
Para ello la clase Universidad utiliza la clase ArrayList con especificador de tipo <>.
Ejemplo:
Paso a seguir 5:
9. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
10. Generar el archivo Universidad.class (Proceso de Compilacin)
La clase Universidad
Prof. Arn Elas Herrera Ponte
Pg. 7
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 8
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 9
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
JPanel
Paso a seguir 6:
Prof. Arn Elas Herrera Ponte
Pg. 10
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
La clase jpanFondo
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanFondo'
package Formularios;
//Declaracion de libreras o paquetes propias del java
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:/ClasesLabAlgoIIProfAron/RecursosHumanos/src/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 dentro de un
componente grfico swing llamado JTabbedPane.
Este ser el TAB de inicio.
Pg. 11
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
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 Formularios;
//Declaracion de libreras o paquetes propias del java
import javax.swing.JLabel;
import javax.swing.ImageIcon;
//Definimos la clase 'jpanInicio'
//que HEREDA de la clase 'jpanFondo'
public class jpanInicio extends jpanFondo{
private JLabel jlblImagenDeFondo;
//Mtodo constructor por defecto
public jpanInicio(){
iniciarComponentes();
}
Prof. Arn Elas Herrera Ponte
Pg. 12
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
public
public
public
public
public
void
void
void
void
void
mousePressed(MouseEvent evt)
mouseExited(MouseEvent evt)
mouseEntered(MouseEvent evt)
mouseClicked(MouseEvent evt)
mouseReleased(MouseEvent evt)
Pasos a seguir 8:
15. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
16. Generar el archivo MiArbolSwing.class (Proceso de Compilacin)
La clase MiArbolSwing
//Declaracin del nombre del paquete donde se encuentra la clase 'MiArbolSwing'
package Formularios;
//Declaracion de libreras o paquetes propias del java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JComponent;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
Prof. Arn Elas Herrera Ponte
Pg. 13
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeNode;
import javax.swing.tree.MutableTreeNode;
import javax.swing.JPopupMenu;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import javax.swing.JOptionPane;
//Importamos las clases del paquete 'Clases'
import Clases.Universidad;
import Clases.Persona;
import Clases.Profesor;
import Clases.Alumno;
//Definimos la clase 'MiArbolSwing'
//que HEREDA de la clase 'JTree'
public class MiArbolSwing extends JTree implements ActionListener, MouseListener{
private JPopupMenu jpopupUnivesidad;
private JPopupMenu jpopupProfesor;
private JPopupMenu jpopupAlumno;
private JMenuItem
jmnuiMostrarDatosUniversidad;
private JMenuItem
jmnuiMostrarDatosProfesor;
private JMenuItem
jmnuiAniadirProfesor;
private JMenuItem
jmnuiEliminarProfesor;
private JMenuItem
jmnuiMostrarDatosAlumno;
private JMenuItem
jmnuiAniadirAlumno;
private JMenuItem
jmnuiEliminarAlumno;
private String
nombreNodo;
private jpanPanelDePestaas
panelDePestaasRelacionado;
private DefaultMutableTreeNode
dmtnRaizRelacionado;
//Declaramos un objeto de tipo Universidad
private Universidad universidadRelacionada;
//Mtodo constructor por parmetro
//Llega por parmetro el nodo raz del rbol, instanciado en la clase 'jpanArbol'
public MiArbolSwing (DefaultMutableTreeNode dmtn) {
//Usamos 'super' para invocar al constructor de la clase padre 'JTree'
//le enviamos el nodo raz del rbol, instanciado en la clase 'jpanArbol'
super(dmtn);
//Relacionamos a 'dmtnRaizRelacionado' con el nodo raz que viene por parmetro
dmtnRaizRelacionado = dmtn;
//Instanciamos el JPopupMenu de la Universidad
//el cual se comporta como si fuera una barra de men
jpopupUnivesidad = new JPopupMenu();
//Instanciamos los JMenuItem
jmnuiMostrarDatosUniversidad = new JMenuItem("Mostrar Universidad");
jmnuiMostrarDatosUniversidad.addActionListener(this);
jmnuiAniadirProfesor = new JMenuItem("Aadir Profesor");
jmnuiAniadirProfesor.addActionListener(this);
jpopupUnivesidad.add(jmnuiMostrarDatosUniversidad);
jpopupUnivesidad.add(new JSeparator());
jpopupUnivesidad.add(jmnuiAniadirProfesor);
Prof. Arn Elas Herrera Ponte
Pg. 14
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 15
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
this.universidadRelacionada = universidadPorReferencia;
}
//Mtodo de la interface 'ActionListener'
public void actionPerformed(ActionEvent ae) {
DefaultMutableTreeNode dmtn, nodoProfesor, node;
TreePath path = this.getSelectionPath();
dmtn = (DefaultMutableTreeNode) path.getLastPathComponent();
//Verificamos si se hizo clic en la opcin 'Mostrar Universidad'
if(ae.getSource() == jmnuiMostrarDatosUniversidad){
//Muestra la Pestaa de Inicio
panelDePestaasRelacionado.cambiarDePestaa(0);
}
//Verificamos si se hizo clic en la opcin 'Mostrar Profesor'
if(ae.getSource() == jmnuiMostrarDatosProfesor){
//Muestra la Pestaa del Profesor
panelDePestaasRelacionado.cambiarDePestaa(1);
}
//Verificamos si se hizo clic en la opcin 'Mostrar Alumno'
if(ae.getSource() == jmnuiMostrarDatosAlumno){
//Muestra la Pestaa del Alumno
panelDePestaasRelacionado.cambiarDePestaa(2);
}
//Verificamos si se hizo clic en la opcin 'Aadir Profesor'
if(ae.getSource() == jmnuiAniadirProfesor){
//Enviamos la referencia del nuevo Nodo creado y de su Nodo Padre
//Lo enviamos al Panel de Ingreso de datos del Profesor
//que se encuentra dentro del Panel de Pestaas
if(panelDePestaasRelacionado.retornarCantidadDeNodosEnElArregloDeProfesores() == 0){
//Declaramos un objeto que tendr el nombre del nodo (IDENTIFICADOR del nodo)
//este nombre se visualizar en el rbol
//este nombre podr ser actualizado
//(Lo VAMOS A ACTUALIZAR EN EL PANEL DE Ingreso de Datos del Profesor)
Object child = "Nuevo Nodo";
//Declaramos un nodo que tendr la referencia del nodo Padre o del nodo raz
DefaultMutableTreeNode parent = null;
//Obtenemos la ruta del nodo al cual hemos hecho clic
TreePath parentPath = this.getSelectionPath();
//Verificamos si la ruta es 'null'
if(parentPath == null){
parent = dmtn;
}else{
//Obtenermos el Nodo Padre del nodo al cual se hizo clic
parent = (DefaultMutableTreeNode)(parentPath.getLastPathComponent());
}
//Creamos un nuevo Nodo Hijo
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);
//Verificamos si el Nodo Padre es 'null'
if(parent == null){
//Asignamos la referencia al nodo raz, creado en la clase 'jpanArbol'
parent = dmtn;
Prof. Arn Elas Herrera Ponte
Pg. 16
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
}
//Importante
//Enviamos el Nodo Padre y el Nodo Hijo, al panel de Pestaas,
//a la espera que el usuario ingrese los datos del Nuevo Profesor
panelDePestaasRelacionado.aadirNodoAlArregloDeProfesores(childNode);
panelDePestaasRelacionado.aadirNodoAlArregloDeProfesores(parent);
//Muestra la Pestaa del Profesor
panelDePestaasRelacionado.cambiarDePestaa(1);
//Indicamos al Panel de Ingreso del Datos Del Profesor que hay un nuevo Nodo Profesor
//y por lo tanto se debe de ingresar sus datos
panelDePestaasRelacionado.indicarQueHayUnNuevoNodoListoParaIngresarLosDatosDelProfesor();
}else{
//Se muestra un mensaje de operacin incorrecta
//Esto significa que el usuario a querido aadir un nuevo nodo Profesor
//sin haber ingresado los datos del nodo Profesor anterior a este.
JOptionPane.showMessageDialog(null,
"Operacin incorrecta!\nComplete los datos del Profesor.",
"Mensaje del Sistema",
JOptionPane.WARNING_MESSAGE);
}
}
//Verificamos si se hizo clic en la opcin 'Eliminar Profesor'
if(ae.getSource() == jmnuiEliminarProfesor){
//Obtenemos la ruta del Nodo al cual hemos seleccionado
TreePath currentSelection = this.getSelectionPath();
//Declaramos una varible de tipo 'String'
String codigoDeLaPersona;
//Declaramos un variable de tipo 'int'
int posicionDeLaPersona;
//Verificamos que la ruta sea diferente de 'null'
if (currentSelection != null) {
//Obtenemos la referencia al Nodo seleccionado
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)
(currentSelection.getLastPathComponent());
//Obtenemos la referencia de su Nodo Padre
MutableTreeNode parent = (MutableTreeNode)(currentNode.getParent());
//Verificamos que el Nodo Padre sea diferente de 'null'
if (parent != null) {
DefaultTreeModel treeModel =(DefaultTreeModel)this.getModel();
//Removemos el Nodo seleccionado
treeModel.removeNodeFromParent(currentNode);
//Nota: Como estamos eliminando un nodo del rbol,
//tambien tenemos que sacar el objeto de tipo 'Persona' que se encuentra
//en el arreglo de Personas de la clase 'Universidad'
//Obtenemos el cdigo del objeto de tipo 'Persona'
//Recordar que el IDENTIFICADOR es ta formado por:
// codigo + " .- " + apellidos + ", " + nombres
codigoDeLaPersona = currentNode.getUserObject().toString();
codigoDeLaPersona = codigoDeLaPersona.substring(0,codigoDeLaPersona.indexOf("
"));
Prof. Arn Elas Herrera Ponte
Pg. 17
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
Pg. 18
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
//Indicamos al Panel de Ingreso del Datos Del Profesor que hay un nuevo Nodo Profesor
//y por lo tanto se debe de ingresar sus datos
panelDePestaasRelacionado.indicarQueHayUnNuevoNodoListoParaIngresarLosDatosDelAlumno();
}else{
//Se muestra un mensaje de operacin incorrecta
//Esto significa que el usuario a querido aadir un nuevo nodo Alumno
//sin haber ingresado los datos del nodo Alumno anterior a este.
JOptionPane.showMessageDialog(null,
"Operacin incorrecta!\nComplete los datos del Alumno.",
"Mensaje del Sistema",
JOptionPane.WARNING_MESSAGE);
}
}
//Verificamos si se hizo clic en la opcin 'Eliminar Alumno'
if(ae.getSource() == jmnuiEliminarAlumno){
node = (DefaultMutableTreeNode)dmtn.getParent();
//Eliminamos a todos los nodos hijos del Padre
node.removeAllChildren();
((DefaultTreeModel )this.getModel()).nodeStructureChanged((TreeNode)dmtn);
//Muestra la Pestaa de Inicio
panelDePestaasRelacionado.cambiarDePestaa(0);
}
}
//*******************************************************
//Mtodos de la interface 'MouseListener'
//*******************************************************
public void mousePressed(MouseEvent evt){ }
public void mouseExited(MouseEvent evt){
}
public void mouseEntered(MouseEvent evt){
}
public void mouseClicked(MouseEvent evt){
}
//Este mtodo reconoce el clic que hacemos a cualquier nodo del rbol
public void mouseReleased(MouseEvent evt){
//Si hacemos clic Derecho sobre un nodo del arbol debemos verificar
//si se ha desplegado su correspondiente JPopupMenu
if ( evt.isPopupTrigger()) {
//Obtenemos la ruta del nodo al cual hemos hecho clic
TreePath path = this.getSelectionPath();
//Verificamos si la ruta es diferente de 'null'
//Recordar que si la ruta es 'null', es porque se ha hecho clic en otro lugar
//que no sea un nodo del rbol
if(path != null){
//Obtenemos la descripcin (IDENTIFICADOR) del nodo al cual hemos hecho clic
//Este IDENTIFICADOR de cada nodo se visualiza en el rbol
nombreNodo = path.getLastPathComponent().toString();
//Utilizamos el objeto de tipo 'Universidad'
//para comparar el valor de la variable 'nombreNodo' con todos los objetos
//almacenados en el arreglo 'arregloDePersonas' que se encuentra en la clase
Universidad
//Verificamos si se hizo clic en el nodo correspondiente a la Universidad
Prof. Arn Elas Herrera Ponte
Pg. 19
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
Pasos a seguir 9:
17. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
18. Generar el archivo jpanArbol.class (Proceso de Compilacin)
Pg. 20
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
La clase jpanArbol
//jpanIngresoDeDatosDelProfesor
package Formularios;
//Declaracion de libreras o paquetes propias del java
import java.awt.BorderLayout;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.JScrollPane;
import javax.swing.ImageIcon;
//Importamos la clase Universidad
import Clases.Universidad;
//Definimos la clase 'jpanArbol'
//que HEREDA de la clase 'jpanFondo'
public class jpanArbol extends jpanFondo{
private DefaultMutableTreeNode
raiz;
private DefaultTreeModel
modelo;
private MiArbolSwing
miArbolSwing;
//Declaramos un objeto de tipo Universidad
private Universidad universidadRelacionada;
//Mtodo constuctor por parmetro
public jpanArbol(Universidad universidadPorReferencia){
this.universidadRelacionada = universidadPorReferencia;
iniciarComponentes();
}
//Mtodo que crea y disea la GUI de este Panel
public void iniciarComponentes(){
setLayout( new BorderLayout() );
//Instanciamos el Nodo 'raiz' del rbol
//Le ponemos con IDENTIFICADOR el nombre largo de la Universidad
raiz = new DefaultMutableTreeNode( universidadRelacionada.getNombreLargo() );
//Instanciamos un objeto de tipo 'MiArbolSwing' que hereda de 'JTree'
//le pasamos por parmetro la referencia al nodo 'raiz'
//NOTA: Este objeto va ha escuchar los eventos del Mouse
//y podr desplegar los JPopupMenu
miArbolSwing = new MiArbolSwing( raiz );
//Indicamos las imagenes que se van a mostrar en cualquier nodo para:
//cuando se crea el Nodo
//cuando se abre el Nodo
//cuando se cierra el Nodo
Prof. Arn Elas Herrera Ponte
Pg. 21
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 22
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
jpanIngresoDeDatos
A continuacin se presenta a la clase jpanIngresoDeDatos, que hereda de la clase
jpanFondo (javax.swing.JPanel). Esta clase se utiliza para crear el panel de ingreso
de datos de una Persona. Se debe indicar que esta clase, es una clase Abstracta, y
que se van a heredar de sta clases DOS clases hijas, las cuales implementarn los
mtodos abstractos y mtodos especficos.
La clase jpanIngresoDeDatos
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanIngresoDeDatos'
package Formularios;
//Declaracion de libreras o paquetes propias del java
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JRadioButton;
import javax.swing.JButton;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
Prof. Arn Elas Herrera Ponte
Pg. 23
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
import java.awt.event.ActionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import java.util.ArrayList;
import java.awt.Color;
//Importamos la clase Universidad
import Clases.Universidad;
//CLASE ABSTRACTA
//Definimos la clase 'jpanIngresoDeDatos'
//que HEREDA de la clase 'jpanFondo'
//e IMPLEMENTA la interface 'ActionListener'
public abstract class jpanIngresoDeDatos extends jpanFondo implements ActionListener{
protected JLabel
jlblTitulo, jlblCodigo, jlblNombres;
protected JLabel
jlblApellidos, jlblCategoria;
protected JLabel
jlblSexo, jlblFechaDeNacimiento, jlblFoto;
protected JTextField
jtxfCodigo, jtxfNombres, jtxfApellidos;
protected JTextField
jtxfFechaDeNacimiento;
protected JComboBox
jcmbxCategoria;
protected JRadioButton jrbtnSexoMasculino, jrbtnSexoFemenino;
protected ButtonGroup btngSexo;
protected JButton
jbtnGrabarDatos, jbtnCargarFoto;
//Declaramos un objeto de tipo Universidad
protected Universidad universidadRelacionada;
//Declaramos un objeto de tipo jpanTabla
protected jpanTabla tablaRelacionada;
//Declaramos un objeto de tipo jpanArbol
protected jpanArbol arbolRelacionado;
//Declaramos un ArrayList que almacene a nodos de tipo DefaultMutableTreeNode
protected ArrayList<DefaultMutableTreeNode> arregloDeNodos;
//Mtodo constructor por defecto
public jpanIngresoDeDatos(){
//Instanciamo el arreglo que almacenar a los nodos del Arbol
arregloDeNodos = new ArrayList<DefaultMutableTreeNode>();
//Invocamos al mtodo que crea la Interface Grfica de Usuario GUI
iniciarComponentes();
}
//Mtodo que crea y disea la GUI de este Panel
public void iniciarComponentes(){
jlblTitulo = new JLabel("Registro de Datos");
jlblTitulo.setBounds(100,10,250,20);
jlblCodigo = new JLabel("Cdigo:");
jlblCodigo.setBounds(100,40,70,20);
jlblNombres = new JLabel("Nombres:");
jlblNombres.setBounds(100,70,70,20);
jlblApellidos = new JLabel("Apellidos:");
jlblApellidos.setBounds(100,100,70,20);
jlblCategoria = new JLabel("Categora:");
jlblCategoria.setBounds(100,130,70,20);
jlblSexo = new JLabel("Sexo:");
jlblSexo.setBounds(100,160,70,20);
Prof. Arn Elas Herrera Ponte
Pg. 24
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 25
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 26
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
jtxfApellidos.setText("");
jcmbxCategoria.setSelectedIndex(0);
jrbtnSexoMasculino.setSelected(true);
jtxfFechaDeNacimiento.setText("");
}
//Este mtodo indica al usuario que hay un Nuevo Nodo listo para ingresar sus datos
//Funciona como un semforo, es decir pintamos de color NARANJA la caja de texto
//correspondiente al cdigo, esto indicar que hay que ingresar datos
public void indicarQueHayUnNuevoNodoListoParaIngresarSusDatos(){
jtxfCodigo.setBackground(Color.ORANGE);
}
}
JPanel
jpanIngresoDeDatosDelProfesor
A continuacin se presenta a la clase jpanIngresoDeDatosDelProfesor, que hereda
de la clase jpanIngresoDeDatos. Esta clase se utiliza para ingresar los datos del
Profesor.
La clase jpanIngresoDeDatosDelProfesor
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanIngresoDeDatosDelProfesor'
package Formularios;
Pg. 27
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
", " +
Pg. 28
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
profesorReferencia.getNombres();
//Aadimos un nuevo Profesor en el ArrayList 'arregloDePersonas'
//que se encuentra dentro de la clase 'Universidad'
universidadRelacionada.ingresarNuevaPersona( profesorReferencia );
//Pedimos mostrar los datos del Profesor en la Tabla
tablaRelacionada.cargarDatosDeLosProfesoresEnLaTabla();
//Actualizando los Datos del Arbol
//Obtenemos el Nodo Hijo y el Nodo Padre, guardados en el arreglo de Nodos
//Nota: Estos nodos fueron guardados desde el rbol, al momento de
//aadir un Nuevo Profesor.
DefaultMutableTreeNode childNode = arregloDeNodos.get(0);
DefaultMutableTreeNode parent = arregloDeNodos.get(1);
//Indicamos el nombre que Identificar al nuevo nodo Hijo
childNode.setUserObject( identificadorDelNodo );
//Importante
//Invocamos al mtodo 'insertarNodoAlArbol' de la clase 'jpanArbol'
//para que inserte el nuevo nodo Hijo dentro de su nodo padre
arbolRelacionado.insertarNodoAlArbol(childNode, parent);
//Limpiar el arreglo de Nodos Profesor
arregloDeNodos.clear();
//Limpiamos los valores de nuestro Formulario de ingreso de datos
limpiarLosValoresDeLosObjetosGUIDelPanel();
}
}else{
//Indicamos que se debe aadir un nuevo Profesor desde el rbol, y luego
//ingresar los datos del profesor en este Panel
mensaje("Operacin incorrecta!\nPrimero se debe Aadir Profesor usando el
rbol",JOptionPane.WARNING_MESSAGE);
}
}
}
Pg. 29
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
JPanel
jpanIngresoDeDatosDelAlumno
A continuacin se presenta a la clase jpanIngresoDeDatosDelAlumno, que hereda
de la clase jpanIngresoDeDatos. Esta clase se utiliza para ingresar los datos del
Alumno.
La clase jpanIngresoDeDatosDelAlumno
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanIngresoDeDatosDelAlumno'
package Formularios;
//Declaracion de libreras o paquetes propias del java
import javax.swing.JOptionPane;
import javax.swing.tree.DefaultMutableTreeNode;
import java.util.Date;
//Importamos la clase Alumno
import Clases.Alumno;
//Definimos la clase 'jpanIngresoDeDatosDelAlumno'
//que HEREDA de la clase 'jpanIngresoDeDatos'
public class jpanIngresoDeDatosDelAlumno extends jpanIngresoDeDatos{
//Este mtodo crea un Nuevo objeto de tipo 'Alumno' y devuelve la Referencia a este
public Alumno crearUnNuevoAlumno(){
Alumno alumno = new Alumno();
Pg. 30
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
alumno.setCodigo( jtxfCodigo.getText() );
alumno.setNombres( jtxfNombres.getText() );
alumno.setApellidos( jtxfApellidos.getText() );
alumno.setCategoria( jcmbxCategoria.getSelectedItem().toString() );
if(jrbtnSexoMasculino.isSelected()){
alumno.setSexo("Masculino");
}
if(jrbtnSexoFemenino.isSelected()){
alumno.setSexo("Femenino");
}
try{
alumno.setFechaDeNacimiento( new Date(jtxfFechaDeNacimiento.getText()) );
}catch(Exception e){
alumno.setFechaDeNacimiento( new Date() );
}
return alumno;
}
//Implementacin del Mtodo abstracto
public void grabarDatos(){
//Obtenemos el cdigo ingresado en la caja de texto
String dato = jtxfCodigo.getText();
//Verificamos si se han almacenado los nodos Hijo y Padre
//Es decir, si se aadi un Nuevo Alumno desde el rbol
if(arregloDeNodos.size() > 0 ){
if(universidadRelacionada.retornarPosicionDeLaPersonaEnElArreglo( dato ) >= 0){
mensaje("CDIGO EXISTENTE!\nIngrese otro
Cdigo",JOptionPane.WARNING_MESSAGE);
}else{
//Declaramos un objeto profesor que har referencia al objeto de tipo Profesor
//instanciado dentro del mtodo 'crearUnNuevoProfesor()'
Alumno alumnoReferencia = crearUnNuevoAlumno();
//Formamos el IDENTIFICADOR del Nuevo Nodo Hijo
//este se mostrar en el rbol, es importante que se muestre su cdigo
String identificadorDelNodo = alumnoReferencia.getCodigo() + " .- " +
alumnoReferencia.getApellidos() +
", " +
alumnoReferencia.getNombres();
//Aadimos un nuevo Alumno en el ArrayList 'arregloDePersonas'
//que se encuentra dentro de la clase 'Universidad'
universidadRelacionada.ingresarNuevaPersona( crearUnNuevoAlumno() );
//Pedimos mostrar los datos del Profesor en la Tabla
tablaRelacionada.cargarDatosDeLosAlumnosEnLaTabla();
//Actualizando los Datos del Arbol
//Obtenemos el Nodo Hijo y el Nodo Padre, guardados en el arreglo de Nodos
//Nota: Estos nodos fueron guardados desde el rbol, al momento de
//aadir un Nuevo Alumno.
DefaultMutableTreeNode childNode = arregloDeNodos.get(0);
DefaultMutableTreeNode parent = arregloDeNodos.get(1);
//Indicamos el nombre que Identificar al nuevo nodo Hijo
Prof. Arn Elas Herrera Ponte
Pg. 31
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
childNode.setUserObject( identificadorDelNodo );
//Importante
//Invocamos al mtodo 'insertarNodoAlArbol' de la clase 'jpanArbol'
//para que inserte el nuevo nodo Hijo dentro de su nodo padre
arbolRelacionado.insertarNodoAlArbol(childNode, parent);
//Limpiar el arreglo de Nodos Profesor
arregloDeNodos.clear();
//Limpiamos los valores de nuestro Formulario de ingreso de datos
limpiarLosValoresDeLosObjetosGUIDelPanel();
}
}else{
//Indicamos que se debe aadir un nuevo Alumno desde el rbol, y luego
//ingresar los datos del alumno en este Panel
mensaje("Operacin incorrecta!\nPrimero se debe Aadir Alumno usando el
rbol",JOptionPane.WARNING_MESSAGE);
}
}
}
JPanel
jpanPanelDePestaas
A continuacin se presenta a la clase jpanPanelDePestaas, que hereda de la clase
jpanFondo. Esta clase se utiliza para disear la Interface Grfica de Usuario (GUI)
que muestre un componente grfico swing llamado JTabbedPane. Este componente
grfico almacena varios paneles en forma de Pestaas Tabuladas. En nuestra
aplicacin se tendr TRES (3) pestaas: Inicio, Profesor y Alumno.
Pg. 32
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
La clase jpanPanelDePestaas
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanPanelDePestaas'
package Formularios;
//Declaracion de libreras o paquetes propias del java
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.tree.DefaultMutableTreeNode;
//Importamos la clase Universidad
import Clases.Universidad;
//Definimos la clase 'jpanPanelDePestaas'
//que HEREDA de la clase 'jpanFondo'
public class jpanPanelDePestaas extends jpanFondo implements ChangeListener{
private JTabbedPane panelDePestaas;
private jpanInicio panelDeInicio;
private jpanIngresoDeDatosDelProfesor panelDeIngresoDelProfesor;
private jpanIngresoDeDatosDelAlumno panelDeIngresoDelAlumno;
//Declaramos un objeto de tipo Universidad
private Universidad universidadRelacionada;
//Declaramos un objeto de tipo jpanTabla
private jpanTabla tablaRelacionada;
//Declaramos un objeto de tipo jpanArbol
private jpanArbol arbolRelacionado;
//Mtodo constructor por parmetro
public jpanPanelDePestaas(jpanTabla tablaPorReferencia){
//Establecemos la referencia al objeto de tipo 'jpanTabla'
//que se ha creado en la clase 'jpanPrincipal'
this.tablaRelacionada = tablaPorReferencia;
iniciarComponentes();
}
//Mtodo que crea y disela la GUI de este Panel
public void iniciarComponentes(){
panelDePestaas = new JTabbedPane();
panelDePestaas.setBounds(0,0,550,400);
//Activamos el escuchador, para que este atento ante algn cambio de pestaa
panelDePestaas.addChangeListener(this);
panelDeInicio = new jpanInicio();
panelDeInicio.setBounds(0,0,550,400);
panelDeIngresoDelProfesor = new jpanIngresoDeDatosDelProfesor();
panelDeIngresoDelProfesor.setBounds(0,0,550,400);
panelDeIngresoDelProfesor.setJlblTitulo("Registro de Datos del Profesor");
panelDeIngresoDelAlumno = new jpanIngresoDeDatosDelAlumno();
panelDeIngresoDelAlumno.setBounds(0,0,550,400);
panelDeIngresoDelAlumno.setJlblTitulo("Registro de Datos del Alumno");
panelDePestaas.addTab("Inicio", panelDeInicio);
Prof. Arn Elas Herrera Ponte
Pg. 33
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
panelDePestaas.addTab("Profesor", panelDeIngresoDelProfesor);
panelDePestaas.addTab("Alumno", panelDeIngresoDelAlumno);
this.add(panelDePestaas);
}
//Este mtodo se invoca AUTOMATICAMENTE cuando hacemos clic en una pestaa
//Tiene un comportamiento muy parecido al mtodo 'actionPerformed'
//Este mtodo trabaja con un objeto de la clase 'JTabbedPane'
public void stateChanged(ChangeEvent changeEvent) {
JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent.getSource();
int indice = sourceTabbedPane.getSelectedIndex();
String etiquetaDeLaPestaa = sourceTabbedPane.getTitleAt(indice);
switch(indice){
case 0 : tablaRelacionada.cargarDatosDeLaUniversidadEnLaTabla(); break;
case 1 : tablaRelacionada.cargarDatosDeLosProfesoresEnLaTabla(); break;
case 2 : tablaRelacionada.cargarDatosDeLosAlumnosEnLaTabla(); break;
}
}
//Este mtodo se utiliza para activar (mostrar) el contenido de un 'Tab'
//En este caso tenemos 3 Tabs: Inicio, Profesor y Alumno
public void cambiarDePestaa(int indice){
panelDePestaas.setSelectedIndex(indice);
}
//IMPORTANTES
//Relacion Pestaa - Universidad
public void relacionarLasPestaasConLaUniversidad(Universidad universidadPorReferencia){
//Establecemos la referencia al objeto de tipo 'Universidad'
//que se ha creado en el mtodo 'main'
this.universidadRelacionada = universidadPorReferencia;
//Pasamos la referencia a los paneles de ingreso de datos del Profesor y Alumno
relacionarLasPestaaDeIngresoDelProfesorConLaUniversidad(universidadPorReferencia);
relacionarLasPestaaDeIngresoDelAlumnoConLaUniversidad(universidadPorReferencia);
}
//Asociacin entre la clase 'panelDeIngresoDelProfesor' y 'Universidad'
public void relacionarLasPestaaDeIngresoDelProfesorConLaUniversidad(Universidad
universidadPorReferencia){
//Establecemos la referencia al objeto de tipo 'Universidad'
//que se ha creado en el mtodo 'main'
this.panelDeIngresoDelProfesor.relacionarElPanelDeIngresoConLaUniversidad(universidadPorReferencia);
}
//Asociacin entre la clase 'panelDeIngresoDelAlumno' y 'Universidad'
public void relacionarLasPestaaDeIngresoDelAlumnoConLaUniversidad(Universidad
universidadPorReferencia){
//Establecemos la referencia al objeto de tipo 'Universidad'
//que se ha creado en el mtodo 'main'
this.panelDeIngresoDelAlumno.relacionarElPanelDeIngresoConLaUniversidad(universidadPorReferencia);
}
//Relacion Pestaa - Tabla
Prof. Arn Elas Herrera Ponte
Pg. 34
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 35
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
JTabbedPane
JPanel
Pg. 36
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
JTabbedPane
JPanel
JTabbedPane
JPanel
Pg. 37
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
jpanTabla
A continuacin se presenta a la clase jpanTabla, que hereda de la clase jpanFondo.
Esta clase se utiliza para mostrar los datos de la Universidad, de los Profesores y de
los Alumnos segn sea el caso. Esta clase muestra los datos utilizando el
componente grfico swing llamado JTable.
La clase jpanTabla
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanTabla'
package Formularios;
//Declaracion de libreras o paquetes propias del java
import javax.swing.JTable;
import javax.swing.JScrollPane;
//Importamos las clases del paquete 'Clases'
import Clases.Universidad;
import Clases.Persona;
import Clases.Profesor;
import Clases.Alumno;
//Definimos la clase 'jpanTabla'
//que HEREDA de la clase 'jpanFondo'
public class jpanTabla extends jpanFondo{
private JScrollPane jscrpanTablaDeDatos;
private JTable jtbTablaDeDatos;
private Object objetos[][];
private String titulosDeCabecera[] = {"Columna1","Columna2","Columna3"};
//Declaramos un objeto de tipo Universidad
private Universidad universidadRelacionada;
//Mtodo Constructor
public jpanTabla(){
iniciarComponentes();
}
//Mtodo que crea y disea la GUI de este Panel
public void iniciarComponentes(){
//Instanciamos una matriz de 2x3 de objetos de tipo 'Object'
objetos = new Object[2][3];
//Instanciamos un objeto de tipo 'JTable'
//Por definicin un JTable est constituido por
//una matriz de tipo Object y un arreglo de tipo String
jtbTablaDeDatos = new JTable(objetos,titulosDeCabecera);
//Instanciamos un objeto de tipo 'JScrollPane'
//para que contenga a la tabla
jscrpanTablaDeDatos = new JScrollPane( jtbTablaDeDatos );
Prof. Arn Elas Herrera Ponte
Pg. 38
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
jscrpanTablaDeDatos.setBounds(0,0,550,200);
//Aadimos el objeto de tipo 'JScrollPane' dentro de este Panel
this.add(jscrpanTablaDeDatos);
}
//Importante
//Este mtodo recibe por parmetro a la Referencia del objeto de tipo 'Universidad'
public void relacionarLaTablaConLaUniversidad(Universidad universidadPorReferencia){
//Establecemos la referencia la objeto de tipo 'Universidad'
//que se ha creado en el mtodo 'main'
this.universidadRelacionada = universidadPorReferencia;
}
//Este mtodo crea una tabla
//para mostrar los datos de la Universidad
public void cargarDatosDeLaUniversidadEnLaTabla(){
//Obtenemos el arreglo que almacena el nombre de cada Atributo de la clase 'Universidad'
String titulo[] = universidadRelacionada.getNombreDeAtributosUniversidad();
//Instanciamos una matriz de UnoxTamanoDeColumna de objetos de tipo 'Object'
objetos = new Object[1][titulo.length];
//Asignamos el valor de cada Atributo del objeto 'universidadRelacionada'
//dentro de cada elemento de la matriz de tipo Object llamada 'objetos'
//Observar que trabajamos para la Primera Fila de ndice igual a CERO
objetos[0][0] = universidadRelacionada.getNombreLargo();
objetos[0][1] = universidadRelacionada.getNombreCorto();
objetos[0][2] = universidadRelacionada.getDireccion();
objetos[0][3] = universidadRelacionada.getRuc();
objetos[0][4] = universidadRelacionada.getTelefono();
//Instanciamos un objeto de tipo 'JTable'
//Por definicin un JTable est constituido por
//una matriz de tipo Object y un arreglo de tipo String
jtbTablaDeDatos = new JTable(objetos,titulo);
jtbTablaDeDatos.setBackground( coColorDeFondo );
//Actualizamos el contenido del JScrollPane
//Es decir ahora le decimos que muestre la nueva tabla creada
jscrpanTablaDeDatos.setViewportView(jtbTablaDeDatos);
}
//Este mtodo crea una tabla
//para mostrar los datos de los Profesores
public void cargarDatosDeLosProfesoresEnLaTabla(){
//Obtenemos el arreglo que almacena el nombre de cada Atributo de la clase 'Persona'
String titulo[] = universidadRelacionada.getNombreDeAtributosPersona();
//Obtenemos la cantidad de objetos de tipo Personas existentes en el arreglo
int totalDePersonas = universidadRelacionada.retornarCantidadDePersonasEnElArreglo();
//Obtenemos la cantidad de objetos de tipo Profesor existentes en el arreglo
int fila = universidadRelacionada.retornarLaCantidadDeProfesoresEnElArregloDePersonas();
//Obtenemos la cantidad de elementos en el arreglo 'titulo'
int columa =titulo.length;
int indice = 0;
//Instanciamos una matriz de FilaxColumna de objetos de tipo 'Object'
objetos = new Object[fila][columa];
//Declaramos un objeto de tipo 'Persona'
Prof. Arn Elas Herrera Ponte
Pg. 39
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
Pg. 40
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
Pg. 41
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
jfrmPrincipal
A continuacin se presenta a la clase jfrmPrincipal, que hereda de la clase JFrame.
Esta clase se utiliza para crear y disear la interface grfica de usuario (GUI) de
nuestra aplicacin. Esta clase UTILIZA y UNE a las dems clases, dndole
finalmente la forma deseada.
La clase jfrmPrincipal
//Declaramos el nombre del paquete donde se encuentra la clase 'jfrmPrincipal'
package Formularios;
//Declaramos las librerias del Java que necesitamos usar
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JSplitPane;
import javax.swing.JButton;
//Importamos la clase Universidad
import Clases.Universidad;
//Definimos la clase 'jfrmPrincipal'
//que HEREDA de la clase 'JFrame'
public class jfrmPrincipal extends JFrame{
private jpanFondo panelDeFondo;
private jpanArbol panelArbol;
private jpanPanelDePestaas panelDePestaas;
private jpanTabla panelTabla;
private JSplitPane panelMovibleVertical;
private JSplitPane panelMovibleHorizontal;
private JButton jbtnAceptar;
//Declaramos un objeto de tipo Universidad
private Universidad universidadRelacionada;
public jfrmPrincipal(Universidad universidadPorReferencia){
//Establecemos la referencia la objeto de tipo 'Universidad'
//que se ha creado en el mtodo 'main'
Prof. Arn Elas Herrera Ponte
Pg. 42
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
this.universidadRelacionada = universidadPorReferencia;
//Invocamos al mtodo 'iniciarComponentes' para crear la interfaz de usuario
iniciarComponentes();
}
//Mtodo que crea y disea la GUI de esta ventana
public void iniciarComponentes(){
//Indicamos el ttulo del formulario
this.setTitle("Recursos Humanos");
//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);
panelDeFondo = new jpanFondo();
panelDeFondo.setBounds(0,0,800,600);
panelArbol = new jpanArbol(universidadRelacionada);
panelArbol.setBounds(0,0,250,600);
panelTabla = new jpanTabla();
panelTabla.setBounds(0,0,550,200);
//Relacionamos la Tabla con la Universidad
panelTabla.relacionarLaTablaConLaUniversidad(universidadRelacionada);
panelTabla.cargarDatosDeLaUniversidadEnLaTabla();
panelDePestaas = new jpanPanelDePestaas(panelTabla);
panelDePestaas.setBounds(0,0,550,400);
//Relacionamos el Arbol con el panel de Pestaas
panelArbol.relacionarAlArbolConElPanelDePestaas(panelDePestaas);
//Relacionamos el Panel de Pestaas con la Universidad
panelDePestaas.relacionarLasPestaasConLaUniversidad(universidadRelacionada);
//Relacionamos los Paneles Ingresat de la Pestaa con la Tabla
panelDePestaas.relacionarLasPestaasConLaTabla(panelTabla);
//Relacionamos el panel de Pestaas con el Arbol
panelDePestaas.relacionarLasPestaasConElArbol(panelArbol);
//IMPORTANTES
//Se instancia un objeto de la clase 'JSplitPane'
panelMovibleVertical = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
panelMovibleVertical.setBounds(0,0,800,600);
//Se instancia un objeto de la clase 'JSplitPane'
panelMovibleHorizontal = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
panelMovibleHorizontal.setBounds(0,0,550,600);
//Colocamos dentro del objeto 'panelMovibleVertical'
//al 'panelArbol' a la izquierda y
//al 'panelMovibleHorizontal' a la derecha
Prof. Arn Elas Herrera Ponte
Pg. 43
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
panelMovibleVertical.setLeftComponent( panelArbol );
panelMovibleVertical.setRightComponent( panelMovibleHorizontal );
panelMovibleVertical.setDividerLocation(250);
//Colocamos dentro del objeto 'panelMovibleHorizontal'
//al 'panelDePestaas' en la parte SUPERIOR
//al 'panelTabla' en la parte INFERIOR
panelMovibleHorizontal.setLeftComponent( panelDePestaas );
panelMovibleHorizontal.setRightComponent( panelTabla );
panelMovibleHorizontal.setDividerLocation(400);
//Aadimos el objeto 'panelMovibleVertical' dento del panel de Fondo
panelDeFondo.add(panelMovibleVertical);
//Aadimos el panel de Fondo dentro del JFrame
this.add(panelDeFondo);
//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);
}
}
Pg. 44
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
RecursosHumanos
A continuacin se presenta a la clase RecursosHumanos. En esta clase instanciamos
el objeto unmsm de tipo Universidad. Este objeto ser utilizado para almacenar los
datos de la Universidad, de los Profesores y de los Alumnos. De manera practica y
sencilla, podemos decir que este objeto es como nuestra BASE de DATOS, porque
guarda toda la informacin que ingresamos usando los formularios.
Esta clase RecursosHumanos tiene al mtodo main. Por lo tanto, es en clase, donde
tenemos que ejecutar el sistema (Proceso de Ejecucin - RUN)
La clase RecursosHumanos
Pg. 45
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 46
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Algortmica II
TAREA
Se pide realizar las siguientes funcionalidades:
1. Validar de manera RIGUROSA el ingreso de datos del Profesor y el ingreso de datos
del Alumno. Por ejemplo: que no se ingresen valores vacos, que la fecha sea en
formato DD/MM/AAAA (DD = DIA [2 dgitos], MM = MES [2 dgitos], AAAA = AO [4
dgitos]).
2. Cambiar el contenido del JComboBox jcmbxCategoria al momento de hacer el ingreso
de datos del alumno. Tener en cuenta que para el alumno se debe mostrar slo las
categoras REGULAR y OBSERVADO. Tener en cuenta que para el profesor se
debe mostrar slo las categoras JEFE DE PRACTICA, AUXILIAR, ASOCIADO y
PRINCIPAL.
3. Cuando se haga clic en la opcin Mostrar Profesor Mostrar Alumno, se debe
mostrar los datos de dicho Profesor Alumno en su respectivo Panel de Ingreso de
Datos.
Pg. 47
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
5. Implementar el cdigo que permita Eliminar a un Nodo Profesor que tiene a su vez Uno
o Varios Nodos Alumno. Es decir que si se elimina al Profesor, el programa elimine a
sus alumnos. Por lo tanto ya no existirn dichos alumnos en el arreglo de Personas y
ya no se mostrarn en la tabla de Alumnos.
6. Crear una ventana para la seleccin de la Fecha. Esta ventana deber usarse cuando
se pida ingresar la Fecha de Nacimiento.
Nota: El diseo de la ventana es a libre criterio de cada uno. Verificar si JAVA tiene una
ventana grfica que permita seleccionar una Fecha.
Pg. 48
Algortmica II
Gua G de Laboratorio
Herencia, Clases Abstractas,
Interface Java y Polimorfismo en Java
Pg. 49