Lograr mostrar una lista en una JTable puede resultar bastante complicado, todo el que lo ha intentado lo sabe…😅
Como estos días he quemado varias neuronas intentando crear una JTable y pasarle los datos de una LinkedList … ahora que al fin logré hacerlo, decidí crear un mini proyecto para guardar esta información para cuando vuelva a necesitarla.
Y como supongo que muchos andarán en lo mismo si están comenzando a trabajar con SWING, aquí les comparto lo que aprendí.
Estructura del proyecto
Para este ejemplo partimos de un proyecto Java que tiene una clase Persona (con sus atributos, constructores, getters y setters, nada más), y una clase Ventana, que fue generada mediante WindowBuilder.

Este es el estado de la ventana con el código base que genera WindowBuilder:

Insertar una JTable
Lo primero es crear un JScrollPane para contener la tabla (si no se pone en un JScrollPane, no se ven los encabezados).
Y luego colocar una JTable dentro del JScrollPane (como se ve en el video que sigue).
Una vez hecho esto, ir al código. Si ejecutan el programa, verán el JScrollPane en blanco.En la imagen siguiente muestro el código que genera WindowBuilder y el resultado (nada alentador 😬).

Crear una lista
Para este ejemplo de prueba creé una lista con 7 objetos de la clase Persona. Normalmente esta lista vendría de una Base de Datos.
// Crear lista de personas a mostrar en la tabla
LinkedList<Persona> lista = new LinkedList<Persona>();
lista.add(new Persona(1, "Ana", "Bolena"));
lista.add(new Persona(2, "Napoleón", "Bonaparte"));
lista.add(new Persona(3, "Marie", "Curie"));
lista.add(new Persona(4, "Albert", "Einstein"));
lista.add(new Persona(5, "Ada", "Lovelace"));
lista.add(new Persona(6, "Alan", "Turing"));
lista.add(new Persona(7, "Mark", "Twain"));
Configurar el Modelo de la JTable
Ahora tenemos que setear la apariencia y el comportamiento del modelo de la JTable:
// Crear un modelo para la tabla
DefaultTableModel modelo = new DefaultTableModel();
// Crear un array con los nombres de los encabezados de la tabla
// (todos o algunos de los atributos de la clase Persona)
String[] encabezados = {"Id", "Nombre", "Apellido"};
// Setear los encabezados de las columnas con el array anterior
modelo.setColumnIdentifiers(encabezados);
// Crear un array de objetos para almacenar los datos de cada fila
Object[] fila;
// Con un bucle for each, por cada persona de la lista...
for (Persona persona : lista) {
// ... instanciar una fila (array de objetos)...
fila = new Object[3]; // (Largo del array de objetos = cantidad de columnas)
// ... guardar el valor de cada campo de la persona en un objeto del array
fila[0] = persona.getId();
fila[1] = persona.getNombre();
fila[2] = persona.getApellido();
// ... y agregar cada fila al modelo de la tabla.
modelo.addRow(fila);
}
Asignar el Modelo a la JTable
Por último, asignamos el modelo que hemos configurado a la JTable:
// Asignar a la tabla el modelo que creamos y configuramos
table.setModel(modelo);
Festejar la hazaña
Ahora es el momento de la verdad… ejecutamos el programa:

Y ya está, eso es todo. Ahora sí podemos festejar la gran hazaña de ser capaces de mostrar una lista en una JTable (sin morir en el intento… o tirar la laptop por la ventana).😁🥳
Recursos
Esta es mi versión super depurada del proceso 😅. Al principio no podía ni crear la tabla, mucho menos ingresarle los datos! Después de muchas horas de leer y mirar tutoriales por todos lados, logré un código que funcionaba, pero que era un lío y no entendía del todo bien.
Si alguien más anda en ese proceso, espero que este aporte le sea de utilidad 😉
El código completo de este mini-proyecto lo puedes encontrar en este repositorio de GitHub:
https://github.com/MartaFagundez/JTable_Basic.git