Я новичок в JTable
, может быть, я что-то не понимаю.
Предположим, что у ArrayList
1000 Students
(id, name, surname, age
). И я хочу показать всех учеников в JTable
. Насколько я понял, я должен создать StudentTableModel
, что extends AbstractTableModel
и установить StudentTableModel
на JTable
. Поэтому мы можем рассматривать StudentTableModel
как "адаптер" между нашими ArrayList
и таблицей. В Интернете я нашел такой пример реализации getValueAt
:
public Object getValueAt(int row, int col) {
Student student = arrayList.get(row);
switch (col) {
case 0:
return student.getId();
case 1:
return student.getName();
case 2:
return student.getSurname();
case 3:
return student.getAge();
}
}
Проблема заключается в том, что с 1000 учеников (строк) и 4 полей (столбцов) мы будем запускать этот переключатель 4000 раз. Пожалуйста, объясните, что я делаю неправильно или расскажу о лучшем решении.
Имея 1000 учеников (строк) и 4 поля (столбцы), мы будем запускать этот переключатель 4000 раз.
Посылка ложна, но вы должны профиль проверить. JTable
использует мухи-шаблон для ячейки рендеринг, поэтому будут рассмотрены только видимые клетки. Этот упрощенный пример иллюстрирует существенный механизм. Этот связанный пример хорошо масштабируется в тысячи строк.
Вы можете хранить студентов в Map
, который сопоставляет строки с атрибутами ученика.
Map<Integer, Object[]> students;
Метод будет выглядеть так:
public Object getValueAt(int row, int col) {
return students.get(row)[col];
}
Map<Key, Student>
; вот связанный пример .