Я пытаюсь отсортировать столбец в своем JTable. Столбец содержит Long (java.util.Long), которые реализуют Comparable. Поэтому, читая этот документ, говорит:
1: Если Comparator был указан для столбца методом setComparator, используйте его.
2: Если класс столбца, возвращенный getColumnClass, является строкой, используйте Comparator, возвращаемый Collator.getInstance().
3: Если класс столбца реализует Comparable, используйте Comparator, который вызывает метод compareTo.
4: Если был указан TableStringConverter, используйте его для преобразования значений в строки, а затем используйте Comparator, возвращаемый Collator.getInstance().
5: В противном случае используйте Comparator, возвращаемый Collator.getInstance(), для результатов вызова toString для объектов.
Мой код не создает пользовательский объект Comparator, поэтому № 1 отсутствует. Столбец представляет собой столбец Лонга, поэтому № 2 отсутствует. № 3 указывает, что он должен сортироваться по методу Long «compareTo». Но это не так. Если в моем JTable есть 3 Long, 90 900 и 111, он отсортирует их: «900, 90, 111» или «111, 90, 900». Похоже, он сортирует их как строки, как указано в № 5.
Здесь мы создаем нашу таблицу:
table = new JTable( new CustomTableModel( new Vector<Vector<Object>>() ,Record.getNames() ) );
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setAutoCreateRowSorter(true);
И затем добавить информацию:
public void setRecords( Iterable<Record> records ){
CustomTableModel model = (CustomTableModel) table.getModel();
model.setRowCount(0);
model.clearRecords();
for( Record r : records ){
Vector<Object> v = new Vector<Object>();
v.add(r.getFromNumber());
v.add(r.getToNumber());
v.add(r.getStartDate());
v.add(new Long( r.getDuration() ) );
model.addRow(v);
model.addRecord(r);
}
model.fireTableDataChanged();
table.getRowSorter().toggleSortOrder(2);
Как я могу это исправить, чтобы последний столбец (столбец 3) сортировался по Long/long/int, а не по строке? Я изучил пользовательские компараторы, но не знал, как реализовать. Разве JTable не должен использовать #3? Спасибо!