Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the easiest way to display the contents of an ArrayList of Objects in a JTable?

Tags:

jtable

I have an ArrayList of Track objects. Each Track object has the following fields (all Strings):

url, title, creator, album, genre, composer

I want to display these tracks in a JTable, with each row being an instance of a Track object, and each column containing one of the properties of a Track object.

How can I display this data using a JTable? I've used an AbstractTableModel that implements the getValueAt() method correctly. Still, I dont see anything on the screen.

Or is it easier just to use arrays?

like image 388
Penchant Avatar asked Dec 30 '22 04:12

Penchant


1 Answers

In order to add contents to display on a JTable, one uses the TableModel to add items to display.

One of a way to add a row of data to the DefaultTableModel is by using the addRow method which will take an array of Objects that represents the objects in the row. Since there are no methods to directly add contents from an ArrayList, one can create an array of Objects by accessing the contents of the ArrayList.

The following example uses a KeyValuePair class which is a holder for data (similar to your Track class), which will be used to populate a DefaultTableModel to display a table as a 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});
}
like image 55
coobird Avatar answered May 01 '23 04:05

coobird