I have a 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);
Now when I load this and click on a column title the rows sort as if they were Strings:
0,10... (in order of length)
How can i change this so they order numerically?
This is because the RowSorter
calls TableModel.getColumnClass(int index)
to get the Class
associated to the column in index
position and use its Comparator
to do the sort.
DefaultTableModel
extends from AbstractTableModel
and doesn't override getColumnClass(int columnIndex)
method:
public Class<?> getColumnClass(int columnIndex) {
return Object.class;
}
As you can see it always return Object.class
. To properly sort your column, you need to override getColumnClass
method.