JXTable — как обновить маркеры при сортировке таблицы

У меня есть JXTable с настраиваемой моделью таблицы. Я добавил 2 ColorHighlighter с пользовательскими HighlightPredicate.

Проблема в том, что когда я нажимаю на заголовок столбца, таблица сортирует строки, НО маркер остается как в старом представлении.

Как я могу обновить состояние подсветки после сортировки таблицы?


person drzymala    schedule 29.10.2012    source источник
comment
преобразовать индекс представления в модель model int modelRow = convertRowIndexToModel(row), возможно, работает, возможно, не зависит от версии SwingX,   -  person mKorbel    schedule 29.10.2012
comment
есть еще несколько вопросов, лучше было бы опубликовать SSCCE , короткий, исполняемый, компилируемый, для потенциальных ответчиков и будущих читатели тоже   -  person mKorbel    schedule 29.10.2012
comment
Спасибо, я добавлю простой пример позже сегодня.   -  person drzymala    schedule 29.10.2012
comment
показать предикат, который вы используете для управления маркером   -  person kleopatra    schedule 29.10.2012


Ответы (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().

person drzymala    schedule 29.10.2012
comment
рад, что вы нашли проблему :-) Попробуйте изменить фрагмент кода с правильно работающей строкой (то есть с преобразованным rowIndex), иначе это немного сбивает с толку. - person kleopatra; 29.10.2012
comment
@kleopatra есть ли другой способ, то есть HighlightPredicate и с getTableModel, не может быть хрупким ??? - person mKorbel; 29.10.2012