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).
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) { } }
1/4
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); }
2/4
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); }
3/4
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.
4/4