Я нашел несколько вопросов, связанных с этим, но я не нашел простое решение для моего вопроса, хотя.
Я не могу найти способ сделать мою JTable сортировать двойные значения правильно.
Я расширил абсолютный элемент, чтобы получить массив класса и вернуть правильные типы на столбцу:
class TableModelMod extends AbstractTableModel{
private ArrayList data;
private String [] headers;
private Class [] types;
TableModelMod(String [] heads, ArrayList datas, Class [] classes){
headers = heads;
data = datas;
types = classes;
}
...
@Override public Class getColumnClass(int c){
if (c > types.length - 1)
return null;
else
return types[c];
}
...
, а затем в моем пользовательском конструкторе JTable:
TableRowSorter<TableModelMod> sorter = new TableRowSorter<TableModelMod>((TableModelMod)getModel());
, но затем я получаю эту ошибку при добавлении строк:
java.lang.IllegalArgumentException: Cannot format given Object as a Number
это не удается в методе DECIMALFORMAT.FORMAT (номер объекта, StringBuffer Tappendto, FieldPosition POS)
, который принимает большинство числовых типов, но двойной.
Если я использую другой класс для двойных колонн, я не получаю ошибку, но все же сортировка не работает должным образом. Я пробовал с разными числовыми классами, но никто не сортирует удваивает правильно:
@Override public Class getColumnClass(int c){
if (c > types.length - 1)
return null;
else if (types[c] == Double.class)
return Number.class;
else
return types[c];
}
Я не уверен, что я вам нужно, это реализовать пользовательский rowsorter, пользовательский Cellrenderer или оба.
Может ли кто-нибудь помочь мне о том, как исправить это проще?
Спасибо много и наилучшие пожелания.
Отредактировано: решено
Это довольно неловко сказать, где проблема была.
ArrayList, содержащий строки [] объекта [], был заполнен из результатов базы данных, используя GetString (int) вместо getbject (int) или getdouble (int), поэтому значение не может быть использовано в качестве двойного рендерера. Странно, что он не дал исключения, используя целое число или номер в качестве класса столбцов, но в любом случае его отсортированы как строка. Я искал проблему в неправильных классах, так как я был убежден, что мой арарилист содержал только объекты.
Большое спасибо для ваших примеров, глядя на них, я заметил, что мои двойники были на самом деле строки, и тогда я мог найти, где происходит преобразование.