我想排序我的JTable中的一列。該列包含Long's(j ava.util.Long),它實現了Comparable。因此,讀取this document時,它說:排序多行的JTable列
1:如果通過setComparator方法爲列指定了比較器,請使用它。 2:如果getColumnClass返回的列類是String,則使用由Collator.getInstance()返回的Comparator。
3:如果列類實現Comparable,則使用調用compareTo方法的Comparator。如果已經指定了TableStringConverter,則使用它將值轉換爲字符串,然後使用由Collator.getInstance()返回的Comparator。 5:否則使用Collator.getInstance()返回的比較器對對象調用toString的結果。
我的代碼不會創建自定義Comparator對象,所以#1出來了。該列是Long的一列,因此#2已經出來。 #3聲明它應該按照長「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),是由長排序/長/整數,而不是字符串?我看着自定義的比較器,但我不知道如何實現。 JTable不應該使用#3嗎?謝謝!
啊,它返回「Object」,而不是Long。我在哪裏設置/更改? – 2011-03-31 01:41:31
下面是使用'AbstractTableModel'使用'DefaultTableModel'和[另一個](http://sites.google.com/site/drjohnbmatthews/table)的[示例](http://stackoverflow.com/questions/3305198)。 – trashgod 2011-03-31 01:44:00
太棒了,謝謝! – 2011-03-31 01:48:31