Was ist der einfachste Weg, um den Inhalt einer Arraylist von Objekten in einem JTable angezeigt werden?
-
05-07-2019 - |
Frage
Ich habe eine Arraylist von Track-Objekten. Jeder Track Objekt hat die folgenden Felder (alle Strings):
URL, Titel, Autor, Album, Genre, Komponist
Ich möchte diese Spuren in einer JTable angezeigt werden, wobei jede Reihe eine Instanz eines Spurobjekt ist und jede Spalte eine der Eigenschaften eines Spurobjekt enthält.
Wie kann ich diese Daten zeigen eine JTable verwenden? Ich habe ein Abstract verwendet, die den getValueAt () -Methode korrekt implementiert. Noch nicht, ich etwas auf dem Bildschirm sehen.
Oder ist es einfacher, nur Arrays zu benutzen?
Lösung
Um Inhalte hinzuzufügen, auf einem JTable
, verwendet man die TableModel
hinzufügen Einträge anzuzeigen.
Ein eine Art und Weise eine Reihe von Daten an den DefaultTableModel
hinzuzufügen, ist mit dem addRow
Methode, die ein Array von Object
s nehmen, die die Objekte in der Reihe darstellt. Da es keine Methoden, um direkt Inhalte aus einem ArrayList
hinzufügen, kann man eine Reihe von Object
s erstellen, indem Sie den Inhalt der ArrayList
erreichbar.
Im folgenden Beispiel wird eine KeyValuePair
Klasse, die einen Halter für Daten (ähnlich Ihrer Track
Klasse) ist, die verwendet wird, um eine DefaultTableModel
eine Tabelle als JTable
angezeigt werden:
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});
}
Andere Tipps
dann, das Problem, das ich habe ist, dass ich überhaupt das Problem nicht sehen kann. hier ist der Code, den ich verwendet habe, um die Schnittstelle zu machen:
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);
}
Nachdem dieser Code ausgeführt wird, ich habe Code in einer anderen Klasse, die dies oft tut:
((DefaultTableModel)mainInterface.table.getModel()).addRow(
new String[] {t.location,t.title,t.creator,t.album,t.genre,t.composer});
t ist ein Track-Objekt durch die Art und Weise.