Quel est le moyen le plus simple d'afficher le contenu d'une ArrayList of Objects dans un JTable?

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

  •  05-07-2019
  •  | 
  •  

Question

J'ai une ArrayList of Track objects. Chaque objet de piste contient les champs suivants (toutes les chaînes):

url, titre, créateur, album, genre, compositeur

Je souhaite afficher ces pistes dans une table JTable, chaque ligne étant une instance d'un objet Track et chaque colonne contenant l'une des propriétés d'un objet Track.

Comment puis-je afficher ces données à l'aide d'une JTable? J'ai utilisé un AbstractTableModel qui implémente correctement la méthode getValueAt (). Pourtant, je ne vois rien à l'écran.

Ou est-il plus simple d'utiliser des tableaux?

Était-ce utile?

La solution

Pour ajouter du contenu à afficher sur un < code> JTable , on utilise le TableModel pour ajouter des éléments à afficher.

Pour ajouter une ligne de données au DefaultTableModel , vous pouvez utiliser addRow méthode qui prend un tableau de Object s qui représente les objets de la ligne. Comme il n’existe aucune méthode permettant d’ajouter directement le contenu d’un ArrayList , il est possible de créer un tableau de Object en accédant au contenu de ArrayList .

L'exemple suivant utilise une classe KeyValuePair qui est un détenteur de données (similaire à votre classe Track ), qui sera utilisée pour renseigner une DefaultTableModel pour afficher un tableau en tant que 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});
}

Autres conseils

alors, le problème que j’ai, c’est que je ne vois pas le problème du tout. voici le code que j'ai utilisé pour faire l'interface:

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);
}

après l'exécution de ce code, j'ai le code dans une autre classe qui le fait plusieurs fois:

((DefaultTableModel)mainInterface.table.getModel()).addRow(
new String[] {t.location,t.title,t.creator,t.album,t.genre,t.composer});

Il s’agit d’un objet Piste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top