Salve a tutti,
Vorrei inserire gli oggetti di un JTable in un Vector e convertite il Vector in un ArrayList.
E' possibile? Se si come fare ?
Grazie.
Salve a tutti,
Vorrei inserire gli oggetti di un JTable in un Vector e convertite il Vector in un ArrayList.
E' possibile? Se si come fare ?
Grazie.
Questione un po' "vaga" .. nel senso che innanzitutto bisognerebbe vedere quale table model hai usato. Se hai esigenze davvero super-basilari (e magari la applicazione ha solo una o due tabelle), puoi anche usare DefaultTableModel, che è molto poco object-oriented poiché molto de-strutturato essendo solo un Vector di Vector di Object.
Se le esigenze fossero più particolari, dovresti implementare un apposito table model. E se avessi svariate tabelle da trattare più o meno allo stesso modo, ciascuna orientata ad una certa entità, allora sarebbe (molto) utile implementare un table model "generico" nel senso che possa gestire un List<T> in modo da renderlo molto riutilizzabile.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ne ho implementata soltanto una di Jtable e gli oggetti sono tutti della stessa classe.
codice:import java.util.Vector; import javax.swing.table.AbstractTableModel; public class VectorTableModel extends AbstractTableModel { Vector v = null; String[] colName = {"Codice partita", "ID stadio", "Partita", "Data", "Prezzo"}; public VectorTableModel(Vector v) { this.v = v; } @Override public int getColumnCount() { return colName.length; } @Override public int getRowCount() { return v.size(); } public String getColumnName(int col) { return colName[col]; } public Object getValueAt(int row, int col) { Partita partita = (Partita) v.elementAt(row); switch(col) { case 0: return partita.getCodicePartita(); case 1: return partita.getCodiceStadio(); case 2: return partita.getSquadraCasa() + " VS " + partita.getSquadraFuoriCasa(); case 3: return partita.getDataPartita(); case 4: return partita.getPrezzo(); default: return ""; } } public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } }
A grandi linee, la tua implementazione è sensata ed appropriata. Il nome della classe è abbastanza generico, mentre invece la classe è specifica per Partita e non per altro tipo. Va anche bene .. cioè, non è quello un problema.
Tieni però presente che il tuo table model non è editabile e nemmeno espandibile. Se tu dall'esterno vai a modificare strutturalmente il Vector che è lo stesso che ha esattamente il VectorTableModel, ovviamente il table model non ne "sa" nulla e quindi di per sé la tabella non può certo aggiornarsi.
A parte questo, riguardo la tua richiesta iniziale, quale è il dubbio? Stai già gestendo un Vector di oggetti di un tuo tipo. Se poi dal Vector vuoi ottenere un ArrayList, basta usare l'apposito costruttore di ArrayList.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ma hai già il Vector .... è quello che passi al tuo table model. E se vuoi creare un ArrayList dal Vector, basta che passi questo al costruttore di ArrayList.
Puoi ordinare il ArrayList ma poi visto che VectorTableModel tratta solo vector, dovresti ricreare un Vector .... un po' macchinoso. In generale sarebbe più utile codificare verso le interfacce ... parlo di List, ovviamente.
E comunque se vuoi puoi anche fare in modo che il sort venga fatto dentro il table model e poi notifichi l'update alla view, in tal caso non avresti nemmeno bisogno di ArrayList. Vector è ordinabile esattamente come ArrayList.![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet