Qual è il modo più semplice per visualizzare il contenuto di una ArrayList of Objects in una JTable?
-
05-07-2019 - |
Domanda
Ho un ArrayList di oggetti Track. Ogni oggetto Track ha i seguenti campi (tutte le stringhe):
url, titolo, creatore, album, genere, compositore
Voglio visualizzare queste tracce in una tabella JT, con ogni riga che rappresenta un'istanza di un oggetto Track e ogni colonna contenente una delle proprietà di un oggetto Track.
Come posso visualizzare questi dati usando una JTable? Ho usato un AbstractTableModel che implementa correttamente il metodo getValueAt (). Tuttavia, non vedo nulla sullo schermo.
O è più semplice usare le matrici?
Soluzione
Per aggiungere contenuti da visualizzare su un < code> JTable , si usa TableModel
per aggiungere elementi da visualizzare.
Uno dei modi per aggiungere una riga di dati al DefaultTableModel
è usare addRow
che accetta una matrice di Object
che rappresenta gli oggetti nella riga. Dato che non ci sono metodi per aggiungere direttamente contenuti da un ArrayList
, si può creare un array di Object
accedendo al contenuto di ArrayList
.
L'esempio seguente utilizza una classe KeyValuePair
che è un detentore di dati (simile alla classe Track
), che verrà utilizzato per popolare una DefaultTableModel
per visualizzare una tabella come JTable
:
class KeyValuePair
{
public String key;
public String value;
public KeyValuePair(String k, String v)
{
key = k;
value = v;
}
}
// ArrayList containing the data to display in the table.
ArrayList<KeyValuePair> list = new ArrayList<KeyValuePair>();
list.add(new KeyValuePair("Foo1", "Bar1"));
list.add(new KeyValuePair("Foo2", "Bar2"));
list.add(new KeyValuePair("Foo3", "Bar3"));
// Instantiate JTable and DefaultTableModel, and set it as the
// TableModel for the JTable.
JTable table = new JTable();
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);
model.setColumnIdentifiers(new String[] {"Key", "Value"});
// Populate the JTable (TableModel) with data from ArrayList
for (KeyValuePair p : list)
{
model.addRow(new String[] {p.key, p.value});
}
Altri suggerimenti
quindi, il problema che ho è che non riesco a vederlo affatto. ecco il codice che ho usato per creare l'interfaccia:
public Interface(){
setSize(1024, 768);
setBackground(new Color(0,0,0));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MenuBar());//simple JMenuBar implementation
table= new JTable();
table.setPreferredScrollableViewportSize(new Dimension(500, 500));
JScrollPane jsp = new JScrollPane(table);
add(jsp);
pack();
setVisible(true);
}
dopo l'esecuzione di questo codice, ho codice in un'altra classe che lo fa molte volte:
((DefaultTableModel)mainInterface.table.getModel()).addRow(
new String[] {t.location,t.title,t.creator,t.album,t.genre,t.composer});
t è comunque un oggetto Traccia.