Java + Swing 014. Modo diseño en NetBeans. Rellenar tabla utilizando ArrayList.

Ejercicio: Realizar una pequeña aplicación que nos permite rellenar una tabla con datos almacenados en una lista.
Creando clase “Persona”.
La clase “Persona” nos servirá de base para crear la lista y poder acceder a sus datos de forma sencilla. La clase cuenta con variables de clase privadas, un método constructor y los Setters & Getters para tener acceso a los datos. A esta aplicación solo servirán los Getters para obtener los datos.
Código Java
/**
*
* @author Ariel
*/

public class Persona {
//Creamos variables de clase.
private int id;
private String nombreApellido;
private String dir;
private String telef;
//Creamos el constructor de la clase
public Persona(int id, String nombreApellido, String dir, String telef) {
this.id = id;
this.nombreApellido = nombreApellido;
this.dir = dir;
this.telef = telef;
}
//Creamos los Setters & Getters. Llamados métodos accesores.
public String getDir() {
return dir;
}

public void setDir(String dir) {
this.dir = dir;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNombreApellido() {
return nombreApellido;
}

public void setNombreApellido(String nombreApellido) {
this.nombreApellido = nombreApellido;
}

public String getTelef() {
return telef;
}

public void setTelef(String telef) {
this.telef = telef;
}

}
Lo siguiente es crear un formulario utilizando un JFrame.
En el diseño vemos la descripción en rojo del nombre de variables que le asignamos a cada objeto, es importante para entender mejor el funcionamiento de los métodos.
Diseño del formulario utilizando JFrame.
Como elementos utilizamos “Botón”, y “Tabla”.
Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho y “Cambiar nombre de variable…”. Se puede usar la que se ajuste a los métodos creados.
Observación: Tomar en cuenta que hay que utilizar las importaciones “import”, básico para utilizar ciertos métodos y objetos. El “setLocationRelativeTo(null)” sirve para centrar el formulario. Los métodos llamados en el constructor de la clase se inician al ejecutar el formulario. Si la Clase “Persona” en este caso está en el mismo paquete que la aplicación, no es necesaria realizar la importación.
Creamos los métodos siguientes en el apartado “Fuente”. Estos métodos utilizan conversiones de tipos de datos, controles de excepciones y demás para controlar lo mejor posible el resultado. Se insertan algunos comentarios para tratar de explicar el funcionamiento de cada método.
Código Java
public void tableModel(){
this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(10);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(150);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(150);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(100);
model = (DefaultTableModel)this.jTable1.getModel();
model.setNumRows(0);
}
public void cargarPersona(){
//Utilizamos la variable lista como ArrayList().
lista = new ArrayList();
lista.clear();
//Cargamos 10 elementos a la lista utilizando el método siguiente.
//La lista puede contener datos obtenidos desde una base de datos.
for (int i = 0; i < 10; i++) {
lista.add(new Persona((i+1), "Persona " +(i+1), "Dirección " +(i+1), "Teléfono " +(i+1)));
}
}
public void cargarTabla(){
//Limpiamos la tabla para no duplicar datos...
model.setNumRows(0);
//Llamamos el método ccargarPersona().
cargarPersona();
//Utilizamos "Iterator" para navegar por la lista.
for (Iterator it = lista.iterator(); it.hasNext();) {
//Hacemos una conversión de la lista en clase Persona
//Esto nos permite obtener los datos con el get.
Persona p = (Persona) it.next();
model.addRow(new Object[]{
p.getId(),p.getNombreApellido(),p.getDir(),p.getTelef()
});
}
}
public void limpiarTabla(){
model.setNumRows(0);
}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto.
Código Java
    private void cargarActionPerformed(java.awt.event.ActionEvent evt) {                                       
cargarTabla();
}

private void limpiarActionPerformed(java.awt.event.ActionEvent evt) {
limpiarTabla();
}
En la imagen, el formulario en ejecución.
Enlace para descarga del Formulario: http://goo.gl/GgZvVY
Son dos archivos más la clase persona, copiar los tres dentro de la carpeta de tu proyecto, tomar en cuenta que hay que cambia la línea de código siguiente: (package com.java.swing;) que indica el paquete de origen por el paquete en el que se ubicarán estos archivos.

11 comentarios :

  1. no entiendo eso de lista = new ArrayList(); me marca error

    ResponderEliminar
    Respuestas
    1. Que tal amigo, puedes verificar si creaste la variable de clase (private List lista;) como se ve en la imagen más arriba. Este podría ser el problema.

      Eliminar
  2. Hola, Amigo me podrias pasar el codigo por favor me urge me marca errores y necesito hacer que me salga la tabla...

    ResponderEliminar
    Respuestas
    1. Que tal amigo, ya enlace el proyecto para su descarga, puedes acceder a ella al final de post.

      Eliminar
  3. Amigazo, tengo una clase cliente.. sus datos los guardo en un arraylist y mi profe me pidio que en una tabla muestre todos los clientes ingresados con sus respectivos datos (nombre, edad, hobbies..etc) me podrias ayudar porfa

    ResponderEliminar
    Respuestas
    1. si quieres te puedo mandar el proyecto

      Eliminar
    2. Que tal amigo, puedes utilizar el método tableModel() como ejemplo para preparar la tabla. Si ya tienes los datos de la clase en un ArrayList(), puedes adaptar el método cargarTabla() para distribuir cada registro del ArrayList dentro de la tabla. Aún si no te sale puedes publicar el enlace del proyecto y vemos si te podemos dar solución. Gracias por comentar.

      Eliminar
  4. buenos dias Carlos, excelente aporte, alseguir tus pasos pude realizar sin ningun problema la consulta y alimentar la tabla con cada uno de los datos,

    saludos desde medellin Colombia

    ResponderEliminar
    Respuestas
    1. Saludos amigo, me alegra que te sirvan los códigos. Gracias por comentar.

      Eliminar
  5. Buen aporte!!, me gustaria saber si se puede hacer con dos clases?

    ResponderEliminar
    Respuestas
    1. Que tal. No hay limitaciones, es cuestión de modificar para que funcione con varias clases. Saludos.

      Eliminar