Я хочу правильно отсортировать таблицу, сравнивая правильные классы, а не строки. Я использую TableRowSorter:
TableRowSorter sorter = new TableRowSorter<CustomModelTable>(modelData);
tablaEJ.setRowSorter(sorter);
Я переопределил метод getColumnClass в CustomModelTable, чтобы получить правильный класс в зависимости от имени столбца (это было сделано, потому что типы определяются программно):
@Override
public Class getColumnClass(int columnIndex)
{
try {
if (columnIndex < this.getColumnCount()) {
String name = getColumnName(columnIndex); //This just gets the header of the column
name = name.toLowerCase();
switch (name) {
case "int":
case "int[]":
case "núm.":
case "int[][]": return Integer.class; //Or Class.forName("java.lang.Integer");
case "byte":
case "byte[]":
case "byte[][]": return Class.forName("java.lang.Byte");
case "long":
case "long[]":
case "long[][]": return Class.forName("java.lang.Long");
case "float":
case "float[]":
case "float[][]": return Class.forName("java.lang.Float");
case "double":
case "double[]":
case "double[][]": return Class.forName("java.lang.Double");
case "boolean":
case "boolean[]":
case "boolean[][]": return Class.forName("java.lang.Boolean");
case "char":
case "char[]":
case "char[][]": return Class.forName("java.lang.Character");
case "string":
case "string[]":
case "string[][]": return Class.forName("java.lang.String");
default: return Class.forName("java.lang.String");
}
}
} catch (Exception e){
}
return null;
}
Вот скриншот: Таблица отсортирована неправильно
Самое любопытное, что я печатаю типы:
for (int i = 0; i < tablaEJ.getModel().getColumnCount(); i++) {
System.out.println(tablaEJ.getModel().getColumnClass(i));
}
И он возвращает ожидаемый результат (печать приведенной выше таблицы):
class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
Честно говоря, я не знаю, что я делаю неправильно.