I am newbie in JTable, maybe I don't understand something.

Let's suppose I have ArrayList of 1000 Students (id, name, surname, age). And I want to show all students in JTable. As far as I understood I must create StudentTableModel that extends AbstractTableModel and set StudentTableModel to JTable. Therefore we can consider StudentTableModel as an "adapter" between our ArrayList and the table. On the internet I found such example implementation of 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();
      }
    }

The problem is that having 1000 students (rows) and 4 field (columns) we will run this switch 4000 times. Please explain what I do wrong or tell about a better solution.

有帮助吗?

解决方案

Having 1000 students (rows) and 4 field (columns), we will run this switch 4000 times.

The premise is false, but you should profile to verify. JTable uses the flyweight pattern for cell rendering, so only visible cells will be examined. This simplified example illustrates the essential mechanism. This related example scales well into the thousands of rows.

其他提示

You can store students in a Map which maps row to student attributes.

Map<Integer, Object[]> students;

The method will look so:

public Object getValueAt(int row, int col) {
    return students.get(row)[col];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top