Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/03/2012, 13:26
Avatar de Zaparl
Zaparl
 
Fecha de Ingreso: febrero-2012
Mensajes: 3
Antigüedad: 12 años, 2 meses
Puntos: 1
Problema con jTextField leyendo datos de un archivo

Hola!

Estoy realizando un ejercicio (supongo que muy típico) de gestionar datos de lectura/escritura de objetos en un fichero. Tengo un JTabPane de tres pestañas: una para grabar datos de la persona al fichero, otra para leerlos y otra con una tabla para mostrar todos los objetos persona del fichero. He creado una clase "Persona" donde van los atributos (nombre, dirección, edad...) los getters y setters y un override del ToString.

La fase de grabar personas en el fichero la tengo hecha y funciona. La fase de leer la tengo "casi". Y ese "casi" me está matando. El código que tengo lee los objetos persona del fichero, los mete en un ArrayList y luego le he metido una salida del string por consola para comprobar si funcionaba (y sí, funciona). El problema viene al intentar rellenar los JTextField con los strings. El código no peta pero no saca nada de nada en los JTextFields. Ahí va el código de la función de lectura. ¡Ah! Programo con NetBeans 7.1.1

Código:
        	
        private void leerPersonas() throws IOException, ClassNotFoundException
	{
		Persona persona;
		FileInputStream fichero;
                ArrayList<Persona>listaPersonas=new ArrayList<Persona>();
		
		
		//Si el fichero NO existe se lanza una excepción.
		//Acceso al fichero -> Abrir para leer (secuencialmente).
		fichero = new FileInputStream(".\\src\\gestionarPersonas\\Datos\\Personas.dat");
		//Para tener acceso a los métodos de leer objetos
		//(serialización) en el fichero.
		
		//Leer los datos de la 1ª Persona (leer un Object).
		//persona = (Persona) leer.readObject();

		//Lectura secuencial de todos los registros.
		//El readObject avanza el puntero al siguiente registro.
                int i=0;
                while ((persona = (Persona) new ObjectInputStream(fichero).readObject()) != null)
		{
                        
                    	listaPersonas.add(persona);
                        //Comprobación por consola
                        System.out.println(listaPersonas.get(i).toString());
                        i+=1;
		}	
                
                //Rellenado de los TextFields de la segunda pestaña con la primera persona 
                //dentro del
                //ArrayList (posición 0) 
               //WARNING! HOUSTON, TENEMOS UN PROBLEMA
                 txtNombre2.setText(listaPersonas.get(0).getNombre());
                 txtTelf2.setText(listaPersonas.get(0).getTelefono());
                 txtDireccion2.setText(listaPersonas.get(0).getDireccion());
                 txtEdad.setText(String.valueOf(listaPersonas.get(0).getEdad()));
                 txtApellidos.setText(listaPersonas.get(0).getApellidos());
                 
		//Cerrar el fichero.
		fichero.close();

	}
La clase Persona
Código:
import java.io.Serializable;
public class Persona implements Serializable
{
	//Es un número ID que permite comprobar si los datos grabados,
	//al ser recuperados, coinciden con la última versión
	//de la clase Persona.
	//TODO Cambiar la estructura de datos (atributos) de
	//la clase Persona y ver el tema del serial ID.
	private static final long serialVersionUID = 5227260147142969242L;

	//--- Atributos/propiedades de la clase ---
	//Concepto de encapsular o no dejar acceso directo.
	private String nombre;
	private String apellidos;
	private String telefono;
	private String direccion;
	private int edad;
	
	public Persona(String nombre, String apellidos, 
				   String telefono, String direccion, int edad)
	{
		this.nombre = nombre;
		this.apellidos = apellidos;
		this.telefono = telefono;
		this.direccion = direccion;
		this.setEdad(edad);
	}
	
	//--- Los métodos accesores (getters y setters) ---
	public String getNombre() {
		return nombre;
		//return nombre.toUpperCase();
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellidos() {
		return apellidos;
		//return apellidos.toUpperCase();
	}
	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
	public String getTelefono() {
		return telefono;
	}
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	public String getDireccion() {
		return direccion;
	}
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	public int getEdad() {
		return edad;
	}
	public void setEdad(int edad) {
		this.edad = edad;
	}

	//--- Métodos propios de la clase ---
	public String toString()
	{
		return (this.getClass().getName() + " - " + 
				this.apellidos + ", " + 
				this.nombre + " (" + this.edad + ")");
	}
}
Muchas gracias por adelantado!