Какой самый простой способ отобразить содержимое ArrayList объектов в JTable? - PullRequest
4 голосов
/ 08 марта 2009

У меня есть ArrayList объектов Track. Каждый объект Track имеет следующие поля (все строки):

URL, название, создатель, альбом, жанр, композитор

Я хочу отобразить эти дорожки в JTable, где каждая строка является экземпляром объекта Track, а каждый столбец содержит одно из свойств объекта Track.

Как я могу отобразить эти данные с помощью JTable? Я использовал AbstractTableModel, который правильно реализует метод getValueAt (). Тем не менее, я ничего не вижу на экране.

Или проще использовать массивы?

Ответы [ 2 ]

10 голосов
/ 08 марта 2009

Чтобы добавить содержимое для отображения на JTable, для добавления элементов для отображения используются TableModel.

Одним из способов добавить строку данных в DefaultTableModel является использование метода addRow, который будет принимать массив Object s, представляющий объекты в строке. Поскольку нет методов для непосредственного добавления содержимого из ArrayList, можно создать массив Object s, обратившись к содержимому ArrayList.

В следующем примере используется класс KeyValuePair, который является держателем данных (аналогично вашему классу Track), который будет использоваться для заполнения DefaultTableModel для отображения таблицы в виде 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});
}
0 голосов
/ 08 марта 2009

тогда проблема в том, что я вообще не вижу проблемы. вот код, который я использовал для создания интерфейса:

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

после выполнения этого кода у меня есть код в другом классе, который делает это много раз:

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

t - это объект Track.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...