Сортировка строк по столбцам в JTable - PullRequest
2 голосов
/ 04 июня 2011

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

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

Ответы [ 2 ]

9 голосов
/ 04 июня 2011

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

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

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;
                }
            } 
4 голосов
/ 04 июня 2011

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

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

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

DefaultRowSorter rowSorter = new DefaultRowSorter();
rowSorter.setComparator(numberColumnIndex,numberSortingComparator);
table.setRowSorter(rowSorter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...