Сортировка целых чисел с помощью сортировщика столбцов JTable по умолчанию?

В настоящее время я использую следующий метод на моей JTable, чтобы получить автоматическую сортировку по столбцам

table.setAutoCreateRowSorter(true);

В настоящее время это позволяет мне щелкать по каждому заголовку, и соответствующий столбец будет сортировать что-либо с буквами. Это портит, когда он пытается отсортировать мои столбцы, которые имеют целые числа. Похоже, что сортирует каждую цифру за раз вместо сортировки по фактическому номеру. Например, он скажет, что 8 больше 100, так как 8 больше 1. Есть ли какой-нибудь способ, которым я могу переопределить это поведение?

2 ответа

Решение

Это портит, когда он пытается отсортировать мои столбцы, которые имеют целые числа

Вероятно потому что:

  1. Вы храните числа в виде строк или
  2. Вы сохраняете данные как объект Integer, но не переопределяете getColumnClass() метод вашей TableModel для возврата Integer.class для этого столбца. Правильный компаратор будет использоваться только тогда, когда ваш класс столбца правильный.

Обратитесь к разделу из учебника по Swing, посвященному понятиям: средства визуализации и редакторы, для получения дополнительной информации и примера того, как можно переопределить метод getColumnClass().

Вам, вероятно, нужно установить сортировщик строк с конкретным компаратором:

Comparator<Integer> comparator;
TableRowSorter sorter;
table.setRowSorter(sorter);
sorter.setModel(table.getModel());
sorter.setComparator(comparator);

Здесь можно узнать больше о компараторе и возможных проблемах с ним. Но @camickr также прав, что, если класс столбца установлен правильно, для Integer обычно не требуется.

Другие вопросы по тегам