Afișarea datelor dintr-un ArrayList într-un tabel Java Swing
Această documentație prezintă modul în care puteți afișa datele dintr-un ArrayList într-un tabel Java folosind biblioteca Swing.
Definiția clasei pentru date
Mai întâi, vom defini o clasă pentru stocarea datelor noastre:
public class Persoana {
private String nume;
private int varsta;
private String profesie;
public Persoana(String nume, int varsta, String profesie) {
this.nume = nume;
this.varsta = varsta;
this.profesie = profesie;
}
public String getNume() {
return nume;
}
public int getVarsta() {
return varsta;
}
public String getProfesie() {
return profesie;
}
}
Crearea unui ArrayList și popularea cu date
import java.util.ArrayList;
// Crearea listei
ArrayList<Persoana> listaPersone = new ArrayList<>();
// Adăugarea datelor în listă
listaPersone.add(new Persoana("Ion Popescu", 25, "Inginer"));
listaPersone.add(new Persoana("Maria Ionescu", 30, "Profesor"));
listaPersone.add(new Persoana("Andrei Vasilescu", 28, "Medic"));
listaPersone.add(new Persoana("Elena Dumitrescu", 35, "Avocat"));
Afișarea datelor din ArrayList într-un JTable
Există două abordări principale pentru afișarea datelor dintr-un ArrayList într-un JTable:
Abordarea 1: Utilizarea unui DefaultTableModel
Aceasta este abordarea cea mai simplă și directă:
import javax.swing.*;
import javax.swing.table.*;
import java.util.ArrayList;
public class ExempluTabelArrayList {
public static void main(String[] args) {
// Crearea și popularea ArrayList-ului
ArrayList<Persoana> listaPersone = new ArrayList<>();
listaPersone.add(new Persoana("Ion Popescu", 25, "Inginer"));
listaPersone.add(new Persoana("Maria Ionescu", 30, "Profesor"));
listaPersone.add(new Persoana("Andrei Vasilescu", 28, "Medic"));
listaPersone.add(new Persoana("Elena Dumitrescu", 35, "Avocat"));
// Definirea numelor coloanelor
String[] numeColoane = {"Nume", "Vârstă", "Profesie"};
// Crearea modelului de tabel
DefaultTableModel model = new DefaultTableModel(numeColoane, 0);
// Popularea modelului cu date din ArrayList
for (Persoana persoana : listaPersone) {
Object[] rand = {
persoana.getNume(),
persoana.getVarsta(),
persoana.getProfesie()
};
model.addRow(rand);
}
// Crearea tabelului cu modelul de date
JTable tabel = new JTable(model);
// Adăugarea tabelului într-un JScrollPane pentru a permite derularea
JScrollPane scrollPane = new JScrollPane(tabel);
// Crearea și configurarea ferestrei
JFrame fereastra = new JFrame("Afișare ArrayList în JTable");
fereastra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fereastra.add(scrollPane);
fereastra.setSize(500, 300);
fereastra.setVisible(true);
}
}
Abordarea 2: Crearea unui TableModel personalizat
Această abordare este puțin mai complexă, dar oferă un control mai mare asupra modului în care datele sunt afișate:
import javax.swing.*;
import javax.swing.table.*;
import java.util.ArrayList;
public class ExempluTabelArrayListPersonalizat {
public static void main(String[] args) {
// Crearea și popularea ArrayList-ului
ArrayList<Persoana> listaPersone = new ArrayList<>();
listaPersone.add(new Persoana("Ion Popescu", 25, "Inginer"));
listaPersone.add(new Persoana("Maria Ionescu", 30, "Profesor"));
listaPersone.add(new Persoana("Andrei Vasilescu", 28, "Medic"));
listaPersone.add(new Persoana("Elena Dumitrescu", 35, "Avocat"));
// Crearea unui model de tabel personalizat
PersoanaTableModel model = new PersoanaTableModel(listaPersone);
// Crearea tabelului cu modelul de date
JTable tabel = new JTable(model);
// Adăugarea tabelului într-un JScrollPane pentru a permite derularea
JScrollPane scrollPane = new JScrollPane(tabel);
// Crearea și configurarea ferestrei
JFrame fereastra = new JFrame("Afișare ArrayList în JTable");
fereastra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fereastra.add(scrollPane);
fereastra.setSize(500, 300);
fereastra.setVisible(true);
}
// Clasa pentru modelul de tabel personalizat
static class PersoanaTableModel extends AbstractTableModel {
private final String[] numeColoane = {"Nume", "Vârstă", "Profesie"};
private ArrayList<Persoana> listaPersone;
public PersoanaTableModel(ArrayList<Persoana> listaPersone) {
this.listaPersone = listaPersone;
}
@Override
public int getRowCount() {
return listaPersone.size();
}
@Override
public int getColumnCount() {
return numeColoane.length;
}
@Override
public Object getValueAt(int row, int col) {
Persoana persoana = listaPersone.get(row);
switch (col) {
case 0: return persoana.getNume();
case 1: return persoana.getVarsta();
case 2: return persoana.getProfesie();
default: return null;
}
}
@Override
public String getColumnName(int col) {
return numeColoane[col];
}
@Override
public Class<?> getColumnClass(int col) {
switch (col) {
case 0: return String.class;
case 1: return Integer.class;
case 2: return String.class;
default: return Object.class;
}
}
}
}
Observații
- Modelul de tabel (
TableModel
) este interfața prin care JTable interacționează cu datele. DefaultTableModel
este o implementare simplă a acestei interfețe care permite adăugarea și ștergerea rândurilor.- În exemplul cu
AbstractTableModel
, avem control deplin asupra modului în care datele sunt afișate și tipurilor de date pentru fiecare coloană. - Pentru liste simple,
DefaultTableModel
este de obicei suficient, iar pentru cazuri mai complexe, se recomandă crearea unui model personalizat.