Номер сортировки в выпуске JTable
Как мне реализовать сортировку столбцов, содержащих. Я установил Cloumnclass это Number.Class
public Class<?> getColumnClass(int columnIndex) {
return Number.class;
}
и создайте TableRowSorter
TableRowSorter sorter= new TableRowSorter<TableModel>(table_mode);
table.setRowSorter(sorter);
Результат 8, 80, 9, 989
вместо 989 , 80, 9, 8
1 ответ
Из документации TableRowSorter:
TableRowSorter
использованияComparator
для сравнения. Следующее определяет, какComparator
выбран для столбца:
- Если
Comparator
был указан для столбцаsetComparator
метод, используйте его.- Если класс столбца, как возвращается
getColumnClass
являетсяString
, использоватьComparator
вернулсяCollator.getInstance()
,- Если класс столбца реализует
Comparable
используйте компаратор, который вызываетcompareTo
метод.- Если
TableStringConverter
было указано, используйте его для преобразования значений вString
с, а затем использоватьComparator
вернулсяCollator.getInstance()
,- В противном случае используйте
Comparator
вернулсяCollator.getInstance()
по результатам звонкаtoString
на объектах.
Третье и пятое правило являются причиной вашей проблемы: вы возвращаете Number.class, который не реализует Comparable. Поэтому ваша таблица сортируется по пятому правилу: ваши значения обрабатываются как строки.
Вместо того, чтобы возвращать Number.class, вам нужно вернуть что-то, что на самом деле реализует Comparable, например, Integer.class, Double.class или BigDecimal.class. Javadoc каждого класса скажет вам, какие интерфейсы он реализует.
В качестве альтернативы, вы можете установить пользовательский компаратор на столбец таблицы, но ваш компаратор должен будет выполнить приведение значений и, возможно, преобразование их. Возвращать сопоставимый класс намного проще.