62
Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas e Informática E.A.P. de Ingeniería de Sistemas Algorítmica II GUIA “G” DE LABORATORIO HERENCIA – CLASES ABSTRACTAS – INTERFACE POLIMORFISMO Objetivo: Aplicar los conceptos de la Programación Orientada a Objetos. Aplicar las definiciones de Herencia, Clases Abstractas e Interface Java. Aprender la herencia entre clases, utilizando el lenguaje de programación Java. Aplicar la definición de Polimorfismo. Descripción: A continuación se presentan varias clases. Cada clase contiene métodos de tipo SET y GET, y métodos operacionales. Los métodos operacionales son métodos que implementan las operaciones ó “FUNCIONALIDADES” del objeto. En esta guía de Laboratorio se va a trabajar con el paquete Clases, que contiene a las clases 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 guía, 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 guía de laboratorio se ha utilizado la librería gráfica SWING de Java, la cual posee muchos componentes gráficos tales como JFrame (marco o contorno), JPanel (panel o lienzo), JLabel (etiqueta), JTextField (caja de texto), JButton (botón), JTextArea (área de texto), JScrollPane (panel de scroll horizontal y vertical), JMenuBar (barra de menú), JToolBar (barra de herramientas), etc. Debo mencionar que uno de los objetivos de esta guía de laboratorio es aprender a usar JTable, JTree, JSplitPane, JPopupMenu y sus demás clases auxiliares. A su vez se ha utilizado la librería gráfica AWT de Java, para el uso de algunos de sus componentes gráfico, como por ejemplo, la clase Color. Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir que cada clase tiene atributos y métodos “PROPIOS” de su

Guia G de Laboratorio

Embed Size (px)

DESCRIPTION

GUIA de la FISI G del profesor Salinas UNMSM

Citation preview

Universidad Nacional Mayor de San Marcos

Algortmica IIGua G de Laboratorio

Herencia, Clases Abstractas,

Interface Java y Polimorfismo en Java

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniera de Sistemas e Informtica

E.A.P. de Ingeniera de Sistemas

Algortmica II

GUIA G DE LABORATORIO

HERENCIA CLASES ABSTRACTAS INTERFACE POLIMORFISMOObjetivo:

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:

public String retornarNombreDelDiaDeLaSemana(int dia)

public String retornarNombreDelMesDelAo(int mes)

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.");

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(opcionmensaje.length);

return opcion;

}

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

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;

}

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{

}

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:

private ArrayList arregloDePersonas;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

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

package Clases;

//Declaracion de libreras o paquetes propias del java

import java.util.ArrayList;

//Definimos la clase 'Universidad'

public class Universidad {

//Declaramos los atributos de la clase Univesidad

private String nombreLargo;

private String nombreCorto;

private String direccion;

private String ruc;

private String telefono;

private String nombreDeAtributosUniversidad[] = {"Nombre","Abrev.","Direccin","Ruc","Telfono"};

private String nombreDeAtributosPersona[] = {"Cdigo", "Nombres","Apellidos","Categora","Sexo","Fec.Nac"};

//Declaramos un objeto de tipo ArrayList, que almacenar objetos de tipo 'Persona'

private ArrayList arregloDePersonas;

//Mtodo constructor por defecto

public Universidad(){

this.nombreLargo = "Universidad Nacional Mayor de San Marcos";

this.nombreCorto = "UNMSM";

this.direccion = "Av. Venezuela Cdra. 34 - Lima 1";

this.ruc = "20148092282";

this.telefono = "6197000";

//Instanciamos un objeto de tipo ArrayList, que almacenar objetos de tipo 'Persona'

arregloDePersonas = new ArrayList();

}

//Retornamos la cantidad de objetos de tipo Persona dentro del arreglo

public int retornarCantidadDePersonasEnElArreglo(){

return arregloDePersonas.size();

}

//Ingresamos un nuevo objeto de tipo Persona dentro del arreglo

public void ingresarNuevaPersona(Persona nuevaPersona){

arregloDePersonas.add(nuevaPersona);

}

//Retornamos un nuevo objeto de tipo Persona

public Persona retornarUnaPersonaPorPosicion(int posicion){

return arregloDePersonas.get(posicion);

}

//Ingresamos un nuevo objeto de tipo Persona dentro del arreglo,

//Especificando la posicin donde se almacenar el nuevo objeto.

public void asignarUnaPersonaEnUnaPosicion(int posicion, Persona nuevaPersona){

arregloDePersonas.set(posicion, nuevaPersona);

}

//Este mtodo elimina un objeto de tipo 'Persona'

//que se encuentra dentro del arreglo de Personas

public void eliminarPersonaDelArreglo(int posicion){

arregloDePersonas.remove(posicion);

}

//Este mtodo busca dentro del arreglo de Personas, si existe algun objeto

//cuyo atributo 'codigo' tenga el valor de la variable 'codigo' que ingresa por parmetro

public int retornarPosicionDeLaPersonaEnElArreglo(String codigo){

Persona temporal;

for(int i=0; i= 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()'

Profesor profesorReferencia = crearUnNuevoProfesor();

//Formamos el IDENTIFICADOR del Nuevo Nodo Hijo

//este se mostrar en el rbol, es importante que se muestre su cdigo

String identificadorDelNodo = profesorReferencia.getCodigo() + " .- " +

profesorReferencia.getApellidos() +", " +

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);

}

}

}

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.

Pasos a seguir 12:

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

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

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();

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

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);

}

}

}

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. Pasos a seguir 13:

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

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

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);

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

public void relacionarLasPestaasConLaTabla(jpanTabla tablaPorReferencia){

//Establecemos la referencia al objeto de tipo 'jpanTabla'

this.tablaRelacionada = tablaPorReferencia;

//Pasamos la referencia a los paneles de ingreso de datos del Profesor y Alumno

relacionarLasPestaaDeIngresoDelProfesorConLaTabla(tablaRelacionada);

relacionarLasPestaaDeIngresoDelAlumnoConLaTabla(tablaRelacionada);

}

//Asociacin entre la clase 'panelDeIngresoDelProfesor' y 'jpanTabla'

public void relacionarLasPestaaDeIngresoDelProfesorConLaTabla(jpanTabla tablaPorReferencia){

//Establecemos la referencia al objeto de tipo 'jpanTabla'

this.panelDeIngresoDelProfesor.relacionarElPanelDeIngresoConLaTabla(tablaPorReferencia);

}

//Asociacin entre la clase 'panelDeIngresoDelAlumno' y 'jpanTabla'

public void relacionarLasPestaaDeIngresoDelAlumnoConLaTabla(jpanTabla tablaPorReferencia){

//Establecemos la referencia al objeto de tipo 'jpanTabla'

this.panelDeIngresoDelAlumno.relacionarElPanelDeIngresoConLaTabla(tablaPorReferencia);

}

//Relacion Pestaa - Arbol

public void relacionarLasPestaasConElArbol(jpanArbol arbolPorReferencia){

//Establecemos la referencia al objeto de tipo 'jpanArbol'

this.arbolRelacionado = arbolPorReferencia;

//Pasamos la referencia a los paneles de ingreso de datos del Profesor y Alumno

relacionarLasPestaaDeIngresoDelProfesorConElArbol(arbolRelacionado);

relacionarLasPestaaDeIngresoDelAlumnoConElArbol(arbolRelacionado);

}

//Asociacin entre la clase 'panelDeIngresoDelProfesor' y 'jpanArbol'

public void relacionarLasPestaaDeIngresoDelProfesorConElArbol(jpanArbol arbolPorReferencia){

//Establecemos la referencia al objeto de tipo 'jpanArbol'

this.panelDeIngresoDelProfesor.relacionarElPanelDeIngresoConElArbol(arbolPorReferencia);

}

//Asociacin entre la clase 'panelDeIngresoDelAlumno' y 'jpanArbol'

public void relacionarLasPestaaDeIngresoDelAlumnoConElArbol(jpanArbol arbolPorReferencia){

//Establecemos la referencia al objeto de tipo 'jpanArbol'

this.panelDeIngresoDelAlumno.relacionarElPanelDeIngresoConElArbol(arbolPorReferencia);

}

//Aadimos Nodos

//Aadimos un Nuevo Nodo al arreglo de Nodos Profesores

public void aadirNodoAlArregloDeProfesores(DefaultMutableTreeNode nodoPorReferencia){

panelDeIngresoDelProfesor.aadirNodoAlArreglo(nodoPorReferencia);

}

//Aadimos un Nuevo Nodo al arreglo de Nodos Alumnos

public void aadirNodoAlArregloDeAlumnos(DefaultMutableTreeNode nodoPorReferencia){

panelDeIngresoDelAlumno.aadirNodoAlArreglo(nodoPorReferencia);

}

//Devuelve la cantidad de Nodos

//Devuelve la cantidad de Nodos en el Arreglo de Profesores

public int retornarCantidadDeNodosEnElArregloDeProfesores(){

return panelDeIngresoDelProfesor.retornarCantidadDeNodosEnElArreglo();

}

//Devuelve la cantidad de Nodos en el Arreglo de Alumnos

public int retornarCantidadDeNodosEnElArregloDeAlumnos(){

return panelDeIngresoDelAlumno.retornarCantidadDeNodosEnElArreglo();

}

//Indicar que hay que ingresar datos del nuevo Nodo

//Ingresar datos del Profesor

public void indicarQueHayUnNuevoNodoListoParaIngresarLosDatosDelProfesor(){

panelDeIngresoDelProfesor.indicarQueHayUnNuevoNodoListoParaIngresarSusDatos();

}

//Ingresar datos del Alumno

public void indicarQueHayUnNuevoNodoListoParaIngresarLosDatosDelAlumno(){

panelDeIngresoDelAlumno.indicarQueHayUnNuevoNodoListoParaIngresarSusDatos();

}

}

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.Pasos a seguir 14:

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

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

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 );

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'

//que har referencia a cada objeto almacenado en el areglo de Personas

Persona temporal;

//Este bucle 'For' recorre el arreglo de Personas, creado en la clase 'Universidad'

for(int i=0; i