JTable AutoCreateRowSorter сортирует числа в виде строк

У меня есть JTable:

JTable table = new JTable();
String[] colNames = {"c1"};
DefaultTableModel model = new DefaultTableModel();

Integer[] x = new Integer[10];
int[] xi = {0,1,2,3,4,5,6,7,8,9};
for (int i=0; i<10; i++){
    x[i]=new Integer(xi[i]);
}model.addColumn("c1");

table.setModel(model);
table.setEnabled(false);
table.setAutoCreateRowSorter(true);
JScrollPane scrollpane = new JScrollPane(table);
contentPane.add(scrollpane);

Теперь, когда я загружаю это и нажимаю на заголовок столбца, строки сортируются, как если бы они были Strings:

0,10... (в порядке длины)

Как я могу изменить это, чтобы они заказали численно?

2 ответа

Решение

Это потому что RowSorter звонки TableModel.getColumnClass(int index) чтобы получить Class связан с колонкой в index позиционировать и использовать его Comparator сделать сортировку.

DefaultTableModel простирается от AbstractTableModel и не отменяет getColumnClass(int columnIndex) метод:

public Class<?> getColumnClass(int columnIndex) {
    return Object.class;
}

Как видите, всегда возвращайтесь Object.class, Чтобы правильно отсортировать столбец, необходимо переопределить getColumnClass метод.

Как я могу изменить это, чтобы они заказали численно?

Переопределить getColumnClass() метод вашей TableModel для возврата Integer.class Целочисленный компаратор будет использоваться для сортировки данных вместо строкового компаратора.

Другие вопросы по тегам