Какой самый простой способ отобразить содержимое ArrayList объектов в JTable?
-
05-07-2019 - |
Вопрос
У меня есть ArrayList объектов Track. Каждый объект Track имеет следующие поля (все строки):
URL, название, создатель, альбом, жанр, композитор
Я хочу отобразить эти треки в JTable, где каждая строка является экземпляром объекта Track, а каждый столбец содержит одно из свойств объекта Track.
Как я могу отобразить эти данные с помощью JTable? Я использовал AbstractTableModel, который правильно реализует метод getValueAt (). Тем не менее, я ничего не вижу на экране.
Или проще использовать массивы?
Решение
Чтобы добавить содержимое для отображения на < code> JTable , каждый использует TableModel
для добавления элементов для отображения.
Одним из способов добавить строку данных в DefaultTableModel
является использование addRow
, который будет принимать массив объекта
, который представляет объекты в строке. Поскольку нет методов для непосредственного добавления содержимого из ArrayList
, можно создать массив из Object
с помощью доступа к содержимому 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});
}
Другие советы
Тогда проблема в том, что я вообще не вижу этой проблемы. вот код, который я использовал для создания интерфейса:
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.