Сортировка строк по столбцам в JTable

Когда вы щелкаете заголовок столбца на моей JTable, он сортирует строки по алфавиту. Это работает для всех моих столбцов, кроме одного. В этом столбце все значения являются строками, но содержат числа. Мне нужно, чтобы они были отсортированы на основе их десятичного значения, а не строкового значения.

Есть идеи, как этого добиться?

2 ответа

Пожалуйста, прочитайте учебник о JTable, который содержит пример TableRowSorter,

ваш ответ эти строки кодов, установите столбец класс правильно

public Class getColumnClass(int c) {
   return getValueAt(0, c).getClass();
}

// or could be in most cases hardcoded, and I'm using that too

            @Override
            public Class<?> getColumnClass(int colNum) {
                switch (colNum) {
                    case 0:
                        return Integer.class;
                    case 1:
                        return Double.class;
                    case 2:
                        return Long.class;
                    case 3:
                        return Boolean.class;
                    case 4:
                        return String.class;
                    case 5:
                        return Icon.class;
                    /*case 6:
                    return Double.class;
                    case 7:
                    return Double.class;
                    case 8:
                    return Double.class;*/
                    default:
                        return String.class;
                }
            } 

Сортировщик строк по умолчанию будет сортировать на основе класса столбца. Если класс столбца - Object (по умолчанию), тогда он использует toString() метод. Если вы можете изменить то, что вы поместили в столбец, на что-то, что реализует интерфейс Comparable (например, Integer/Double), тогда он будет использовать этот компаратор вместо этого. Вам также нужно будет изменить класс столбца в модели таблицы.

Для этого вам нужно расширить DefaultTableModel (или реализовать AbstractTableModel или TableModel) и переопределить метод getColumnClass().

Если вы не можете изменить данные, которые входят в столбец (по какой-то причине вы хотите хранить строки там), вам придется изменить RowSorter для таблицы.

DefaultRowSorter rowSorter = new DefaultRowSorter();
rowSorter.setComparator(numberColumnIndex,numberSortingComparator);
table.setRowSorter(rowSorter);
Другие вопросы по тегам