Сортировка двойных значений в JTable

Я нашел несколько вопросов, связанных с этим, но я не нашел простое решение для моего вопроса, хотя.

Я не могу найти способ сделать мою 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), поэтому значение не может быть использовано в качестве двойного рендерера. Странно, что он не дал исключения, используя целое число или номер в качестве класса столбцов, но в любом случае его отсортированы как строка. Я искал проблему в неправильных классах, так как я был убежден, что мой арарилист содержал только объекты.

Большое спасибо для ваших примеров, глядя на них, я заметил, что мои двойники были на самом деле строки, и тогда я мог найти, где происходит преобразование.

6
задан oers 15 December 2011 в 10:24
поделиться