在Java Swing应用程序(内置在Netbeans 6.9)中,我有一个21列的JTable。这些列中大约有14列包含双值。前6列是日期和字符串。在第七列,双打开始。当应用程序运行时,通过点击表的标题行,表中的每一列都将正确排序——除了第7列。表认为该数据为字符串类型,并将其作为字符串进行排序。
如果我将数据移动到另一列,那么新列现在将作为字符串排序。所以问题不在于特定的列,而在于数据本身。
然而,数据被定义为double类型,非常简单:
double x;
public double getX() {
return x;
}
正确排序的双精度类型的列定义方式相同。
我甚至尝试将这个有问题的数据转换为双精度类型(即使它已经是双精度类型),但它没有任何区别。
我还尝试为不排序为数字的列设置单元格渲染器(即使其他列不需要此步骤)。
table.getColumnModel().getColumn(6).setCellRenderer(table.getDefaultRenderer(Double.class));
还有什么可能导致这列数字排序为字符串?
我必须在扩展DefaultTableModel的类中实现getColumnClass。
public class MyTableModel extends DefaultTableModel {
public MyTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}