当您单击JTable上的列标题时,它会按字母顺序对行进行排序。除了一个列之外,这适用于我的所有列。在此列中,值都是字符串,但包含数字。我需要根据它们的十进制值而不是字符串值对它们进行排序。
知道怎么做到这一点吗?
答案 0 :(得分:9)
请阅读有关JTable的教程,其中包含TableRowSorter示例
你的答案是这些代码行,正确设置列类
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
// or could be in most cases hardcoded, and I'm using that too
@Override
public Class<?> getColumnClass(int colNum) {
switch (colNum) {
case 0:
return Integer.class;
case 1:
return Double.class;
case 2:
return Long.class;
case 3:
return Boolean.class;
case 4:
return String.class;
case 5:
return Icon.class;
/*case 6:
return Double.class;
case 7:
return Double.class;
case 8:
return Double.class;*/
default:
return String.class;
}
}
答案 1 :(得分:4)
默认行排序器将根据列类进行排序。如果列类是Object(默认值),则它使用toString()
方法。如果你可以将你放入列中的内容更改为实现Comparable接口的内容(例如Integer / Double),那么它将使用该比较器代替。您还必须更改表模型上的列类。
为此,您必须扩展DefaultTableModel(或实现AbstractTableModel或TableModel)并覆盖getColumnClass()方法。
如果您无法更改进入该列的数据(由于某种原因您希望在那里存储字符串),那么您将不得不修改该表的RowSorter。
DefaultRowSorter rowSorter = new DefaultRowSorter();
rowSorter.setComparator(numberColumnIndex,numberSortingComparator);
table.setRowSorter(rowSorter);