在JTable中按列对行进行排序

当您单击JTable上的列标题时,它会按字母顺序对行进行排序。 除了一个列之外,这适用于我的所有列。 在此列中,值都是字符串,但包含数字。 我需要根据它们的十进制值而不是字符串值对它们进行排序。

知道怎么做到这一点?

请阅读有关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; } } 

默认行排序器将根据列类进行排序。 如果列类是Object(默认值),那么它使用toString()方法。 如果你可以将你放入列中的内容更改为实现Comparable接口的内容(例如Integer / Double),那么它将使用该比较器代替。 您还必须更改表模型上的列类。

为此,您必须扩展DefaultTableModel(或实现AbstractTableModel或TableModel)并覆盖getColumnClass()方法。

如果您无法更改进入该列的数据(由于某种原因您希望在那里存储字符串),则必须修改该表的RowSorter。

 DefaultRowSorter rowSorter = new DefaultRowSorter(); rowSorter.setComparator(numberColumnIndex,numberSortingComparator); table.setRowSorter(rowSorter);