Опитвам се да сортирам колона в моята JTable. Колоната съдържа Long's (java.util.Long), които имплементират Comparable. Следователно, четейки този документ, казва:
1: Ако е зададен Comparator за колоната чрез метода setComparator, използвайте го.
2: Ако класът на колоната, върнат от getColumnClass, е String, използвайте 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 дълги, 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? Благодаря!