Qual è il modo più semplice per visualizzare il contenuto di una ArrayList of Objects in una JTable?

StackOverflow https://stackoverflow.com/questions/623690

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top