Sie sind auf Seite 1von 4

PRCTICA DE LENGUAJE DE PROGRAMACIN

Tema: Serializar Array de Objetos En esta prctica se har una versin mejorada del programa anterior que demostraba la serializacin de un Objeto. Ahora serializaremos una lista de objetos Alumno. Para mantener y gestionar la lista de objetos haremos uso de la clase estndar ArrayList que permite trabajar con un arrays de objetos. 1. Abre el proyecto sistema copia y pega el mismo en el explorador de paquetes de eclipse para tener una copia. A esta copia dale el nombre de Serializar Lista. Luego en vista diseo modifica la interfaz del FormularioAlumno siguiendo los pasos: a) Como vamos a tener una lista de alumnos necesitamos algunos JButton que permitan desplazarnos y mostrar uno a uno cada alumno as como JLabels para mostrar el registro actual (alumno actual).

btnSiguiente btnAnterior lblReg lblTotal

b) Los botones de comando en la parte inferior del cuadro deben quedar como:

Con los nombres respectivos btnNuevo, btnEliminar, etc c) Luego realiza los cambios necesarios para que lblReg y lblTotal se declaren como atributos de clase y slo se creen en el mtodo initialize. Adems agregar en los atributos de clase: private JLabel lblReg; private JLabel lblTotal; private ArrayList <Alumno> lista = new ArrayList<Alumno>(); // array de alumnos private int nroReg = -1; // registro actual: -1 es ninguno private JButton btnSalir; 2. Ahora modificar o reemplazar los mtodos referidos a serializacin:
public void leerDisco() { Alumno alumno; try { // crear un flujo de entrada desde archivo "alumnos.dat" ObjectInputStream archivo = new ObjectInputStream (new FileInputStream("alumnos.dat")); // leer mientras no llegue al final del archivo while ( (alumno = (Alumno)archivo.readObject() ) != null) lista.add(alumno); // agregar a la lista archivo.close(); } catch (IOException e) { /* error de E/S */ } catch (ClassNotFoundException e) { /* error de conversin */ } } // Guardar lista en disco public void guardarDisco() { try { ObjectOutputStream archivo = new ObjectOutputStream (new FileOutputStream("alumnos.dat")); for (int i=0; i <lista.size(); i++) // recorrer todos los alumnos de la lista archivo.writeObject(( Alumno) lista.get(i)); // guardar objeto alumno archivo.close(); } catch (IOException e) { } }

Prof. Simn Quispeluza M.

1/4

IESPP-Jos Jimnez Borja

3. Agregar los nuevos mtodos:


// Muestra en los componentes los datos de un determinado alumno public void mostrarRegistro(int reg) { // Los registros van de [0 a lista.size()-1] if ( lista.isEmpty() ) return; // si lista vaca salir txtNombres.setText(lista.get(reg).getNombres()); txtApellidos.setText(lista.get(reg).getApellidos()); dcFena.setDate( lista.get(reg).getFena() ); cboNivel.setSelectedIndex(lista.get(reg).getNivel()); cboGrado.setSelectedIndex(lista.get(reg).getGrado()); cboSeccion.setSelectedIndex(lista.get(reg).getSeccion()); lstApoderados.setSelectedIndex(lista.get(reg).getApoderado()); lstApoderados.ensureIndexIsVisible(lista.get(reg).getApoderado()); bgSexo.clearSelection(); if (lista.get(reg).getSexo() == true) rbMasculino.setSelected(true); else rbFemenino.setSelected(true); chkBecado.setSelected(lista.get(reg).getBecado()); // mostrar contador de Registro mostrarNroReg(reg); } // Mostrar Nro de registro actual / Total public void mostrarNroReg(int reg) { lblReg.setText(String.valueOf(reg+1)); lblTotal.setText(String.valueOf(lista.size())); }

4. Ahora implementar el mtodo actionPerformed de los objetos oyentes ActionListener de cada uno de los botones de comando: a) Para Nuevo:
limpiarCampos(); // mostrar nro registro mostrarNroReg(lista.size());

b) Para Eliminar:
if ( !lista.isEmpty() ) { // si lista no vaca lista.remove(nroReg); // borrar elemento nroReg = lista.size()-1; // ir al ltimo elemento if ( ! lista.isEmpty()) mostrarRegistro(nroReg); else { // la lista est vaca limpiarCampos(); mostrarNroReg(0); } }

c) Para Salir:
int rpta = JOptionPane.showConfirmDialog(frmDatos, "Guardar la lista de alumnos en disco?", "Pregunta", JOptionPane.YES_NO_CANCEL_OPTION); if (rpta != JOptionPane.CANCEL_OPTION) { // si rpta diferente de cancelar if (rpta == JOptionPane.OK_OPTION) // si rpta es aceptar guardarDisco(); System.exit(0); }

Prof. Simn Quispeluza M.

2/4

IESPP-Jos Jimnez Borja

d) Para Agregar:
if ( validarCampos() == false ) JOptionPane.showMessageDialog(frmDatos, "Faltan datos", "Mensaje", 1); else { // datos completos y vlidos => agregar en la lista lista.add(new Alumno(txtNombres.getText(), txtApellidos.getText(), dcFena.getDate(), (rbMasculino.isSelected()?true : false), cboNivel.getSelectedIndex(), cboGrado.getSelectedIndex(), cboSeccion.getSelectedIndex(), lstApoderados.getSelectedIndex(), chkBecado.isSelected() )); // mostrar ultimo alumno nroReg =lista.size()-1; mostrarRegistro(nroReg); }

5. Tambin implementar el mtodo actionPerformed de los objetos oyentes ActionListener de los botones de navegacin: a) Para btnAnterior:
if (nroReg > 0 ) { // si no es el primer registro nroReg--; // retroceder 1 registro mostrarRegistro(nroReg); }

b) Para btnSiguiente:
if (nroReg < (lista.size() -1) ) { // si no es el ltimo nroReg++; // avanzar 1 registro mostrarRegistro(nroReg); }

6. Modificar el constructor de la clase de tal forma que quede as:


public FormularioAlumno() { initialize(); leerDisco(); if ( ! lista.isEmpty()) { nroReg = lista.size()-1; // ultimo registro mostrarRegistro(nroReg); } }

Esto hace que se muestre la lista de alumnos al iniciar el programa.

7. Implementar el el siguiente cdigo para el evento windowClosing:


btnSalir.doClick(); // llamar al botn Salir

Prof. Simn Quispeluza M.

3/4

IESPP-Jos Jimnez Borja

8. Corregir posibles errores, eliminar mtodos no usados (como capturarCampos, actualizarCampos) y verificar la funcionalidad del programa. La apariencia final del mismo debe ser similar a:

Actividades: Investiga sobre la clase ArrayList y sus mtodos ms importantes. Resume los mtodos importantes que se utilizaron en esta prctica.

Prof. Simn Quispeluza M.

4/4

IESPP-Jos Jimnez Borja