Сортировка строк по столбцам в 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);