我是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次。请解释我的错误或告诉我们更好的解决方案。
答案 0 :(得分:2)
有1000名学生(行)和4个字段(列),我们将运行此开关4000次。
前提是错误的,但您应该profile进行验证。 JTable
使用flyweight pattern用于单元格rendering,因此只会检查可见单元格。这个简化的example说明了基本机制。这个相关的example可以很好地扩展到数千行。
答案 1 :(得分:0)
您可以将学生存储在Map
中,以便将行映射到学生属性。
Map<Integer, Object[]> students;
该方法看起来如此:
public Object getValueAt(int row, int col) {
return students.get(row)[col];
}