我有一个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 ......(按长度顺序)
我如何改变这一点,以便按数字顺序排列?
答案 0 :(得分:4)
我如何改变这一点,以便按数字顺序排列?
重写TableModel的getColumnClass()
方法以返回Integer.class
,并使用Integer Comparator对数据进行排序,而不是字符串比较器。
答案 1 :(得分:4)
这是因为RowSorter
调用TableModel.getColumnClass(int index)
来获取与Class
位置相关联的index
并使用其Comparator
进行排序。
DefaultTableModel
从AbstractTableModel
延伸,不会覆盖getColumnClass(int columnIndex)
方法:
public Class<?> getColumnClass(int columnIndex) {
return Object.class;
}
正如您所见,它始终返回Object.class
。要对列进行正确排序,您需要覆盖getColumnClass
方法。