2009-03-08 4 views
4

Ich habe eine ArrayList von Track-Objekten. Jeder Track Objekt hat die folgenden Felder (alle Strings):Was ist der einfachste Weg, um den Inhalt einer ArrayList von Objekten in einer JTable anzuzeigen?

URL, Titel, Autor, Album, Genre, Komponist

Ich möchte diese Spuren in einem JTable angezeigt werden, wobei jede Zeile eine Instanz eines Wesens Verfolgen Sie das Objekt und jede Spalte, die eine der Eigenschaften eines Track-Objekts enthält.

Wie kann ich diese Daten mit einer JTable anzeigen? Ich habe ein AbstractTableModel verwendet, das die Methode getValueAt() korrekt implementiert. Trotzdem sehe ich nichts auf dem Bildschirm.

Oder ist es einfacher, nur Arrays zu verwenden?

Antwort

10

Um Inhalte zur Anzeige auf einer JTable hinzuzufügen, verwendet man die TableModel, um Elemente zur Anzeige hinzuzufügen.

Eine Möglichkeit zum Hinzufügen einer Datenzeile zu DefaultTableModel ist die Verwendung der addRow Methode, die ein Array von Object s übernimmt, das die Objekte in der Zeile darstellt. Da es keine Methoden zum direkten Hinzufügen von Inhalten aus einer ArrayList gibt, kann man ein Array von Objects erstellen, indem man auf den Inhalt der ArrayList zugreift.

Im folgende Beispiel wird eine KeyValuePair Klasse, die eine Halterung für Daten (ähnlich Ihre Track Klasse) ist, der verwendet wird, eine DefaultTableModel angezeigt wird eine Tabelle als JTable zu füllen:

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

Super !!!!! Vielen Dank. – Penchant

+0

Gern geschehen :) – coobird

0

dann, Das Problem, das ich habe, ist, dass ich das Problem überhaupt 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); 
} 

nach diesem 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 Apropos.