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().

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