繁体   English   中英

JTable AutoCreateRowSorter将数字排序为字符串

[英]JTable AutoCreateRowSorter sorting Numbers As Strings

我有一个JTable:

JTable table = new JTable();
String[] colNames = {"c1"};
DefaultTableModel model = new DefaultTableModel();

Integer[] x = new Integer[10];
int[] xi = {0,1,2,3,4,5,6,7,8,9};
for (int i=0; i<10; i++){
    x[i]=new Integer(xi[i]);
}model.addColumn("c1");

table.setModel(model);
table.setEnabled(false);
table.setAutoCreateRowSorter(true);
JScrollPane scrollpane = new JScrollPane(table);
contentPane.add(scrollpane);

现在当我加载它并单击列标题时,行排序就好像它们是字符串:

0,10 ......(按长度排序)

我怎样才能改变它,以便按数字顺序排列?

我怎样才能改变它,以便按数字顺序排列?

覆盖TableModel的getColumnClass()方法以返回Integer.class ,Integer Comparator将用于对数据进行排序,而不是字符串比较器。

这是因为RowSorter调用TableModel.getColumnClass(int index)来获取与index位置的列关联的Class ,并使用其Comparator进行排序。

DefaultTableModelAbstractTableModel扩展,不覆盖getColumnClass(int columnIndex)方法:

public Class<?> getColumnClass(int columnIndex) {
    return Object.class;
}

如您所见,它总是返回Object.class 要对列进行正确排序,需要覆盖getColumnClass方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM