JXTable - как обновить подсветку при сортировке таблицы
У меня есть JXTable с пользовательской моделью таблицы. Я добавил 2 ColorHighlighter's с пользовательскими HighlightPredicate.
Проблема в том, что когда я нажимаю на заголовок столбца, таблица сортирует строки, НО маркер остается таким же, как и в старом представлении.
Как я могу обновить состояние подсветки после сортировки таблицы?
1 ответ
Решение
Как упомянул @kleopatra, я посмотрел на свой предикат:
HighlightPredicate spakowany = new HighlightPredicate() {
@Override
public boolean isHighlighted(Component renderer, ComponentAdapter adapter) {
TableModel tableModel = table.getModel();
if (tableModel instanceof StanTableModel) {
StanTableModel stanTableModel = (StanTableModel) tableModel;
// int rowIndex = adapter.row; <- this was the issue
int rowIndex = adapter.convertRowIndexToModel(adapter.row);
StanTableRow myCustomRow = stanTableModel.getRow(rowIndex);
if ((myCustomRow.isSpakowany()) {
return true;
}
}
return false;
}
};
и использовал идею @mKorbel:
было:
int rowIndex = adapter.row;
сейчас:
int rowIndex = adapter.convertRowIndexToModel(adapter.row);
И это работает сейчас.
StanTableModel - моя пользовательская модель стола. Он имеет функцию getRow() и возвращает объект StanTableRow, который, в свою очередь, имеет функцию isSpakowany().