Вопрос

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