在JTable中按列对行进行排序

时间:2011-06-03 20:39:45

标签: java swing jtable

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

知道怎么做到这一点吗?

2 个答案:

答案 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);