2

我有一个 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...(按长度顺序)

我怎样才能改变它,以便他们以数字方式订购?

4

2 回答 2

4

我怎样才能改变它,以便他们以数字方式订购?

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

于 2013-10-22T18:57:43.377 回答
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方法。

于 2013-10-22T19:01:56.260 回答