Подтвердить что ты не робот

JTable Clickable Column Sorting: Сортировка сортирует содержимое ячеек, но не обновляет форматирование ячейки?

У меня есть сортируемый JTable, чтобы использовать пользовательское расширение AbstractTableModel. Тем не менее, какое-то поведение этой таблицы является тем, что я ожидал, и мне хотелось бы получить некоторые советы о том, как это понять.

У меня есть JTable, который можно сортировать, используя:

thisJTable.setAutoCreateRowSorter(true);

Это позволяет мне сортировать таблицу, щелкая по заголовкам столбцов, как ожидалось.

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

Я установил эти строки для цветовой кодировки на основе значений, которые они содержат. Когда я сортирую по заголовку столбца, форматирование в заданной строке NUMBER остается неизменным (хотя содержимое, которое было ранее в этой строке, перемещено).

Цвет строки задается путем переопределения вызова prepareRenderer по умолчанию для JTable:

thisTable = new JTable(thisModel){

    //Set up custom rendering - Sets background color of row to correct value
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component c = super.prepareRenderer(renderer, row, column);
        CustTableModel thisModel = (CustTableModel) getModel();
        c.setBackground(thisModel.getRowBackgroundColor(row));
        c.setForeground(thisModel.getRowForeColor(row));
        return c;
    }
};

Есть ли лучший способ для этого?

Должен ли я использовать другой метод для моего рендеринга, метод, который будет обновлять рендеринг JTable в сортировке?

Или я хочу посмотреть на мой собственный метод сортировки?

Решение (спасибо mKorbel!)

Мне показалось, что я выложу свое решение, так как мне пришлось немного поиграть с этим, так как я не был уверен, будет ли новый указатель передан и в prepareRenderer.

 thisTable = new JTable(thisModel){

    //Set up custom rendering - Sets background color of row to correct value
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {

        int viewIdx = row;
        int modelIdx = convertRowIndexToModel(viewIdx);
        Component c = super.prepareRenderer(renderer, row, column);
        CustTableModel thisModel = (CustTableModel) getModel();
        c.setBackground(thisModel.getRowBackgroundColor(modelIdx));
        c.setForeground(thisModel.getRowForeColor(modelIdx));
        return c;
    }
};
4b9b3361