Обновите JTable, когда setAutoCreateRowSorter имеет значение true.

StackOverflow https://stackoverflow.com/questions/9392850

Вопрос

Я написал рендеринг таблицы по умолчанию следующим образом:

public class CustTableRenderer extends DefaultTableCellRenderer{

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
        try {

            Object cellObj = table.getModel().getValueAt(row, 7); 
            double cellValue = (Double) cellObj;

            if (cellValue < 0) {
                comp.setBackground(new Color(255, 48, 48));
            } else if (cellValue == 0) {
                comp.setBackground(new Color(173, 255, 47));
            } else {
                comp.setBackground(Color.white);
            }

            if (isSelected) {
                comp.setBackground(new Color(71, 60, 139));
                TableModel model = table.getModel();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return comp;
    }
}

Чтобы выделить строки, содержащие минусовые значения столбца 7, я также установил setAutoCreateRowSorter к true.Моя проблема в том, что когда я щелкаю заголовок для сортировки по нему, таблица сортируется, но выделенная строка не изменяется, поэтому выделяется неправильная строка.

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

Это было полезно?

Решение

координаты, передаваемые в средство визуализации, находятся в системе координат представления, вам необходимо преобразовать их в координаты модели, прежде чем получить доступ к модели:

  int modelRow = table.convertRowIndexToModel(row);
  int modelColumn = table.convertColumnIndexToModel(column);
  cellObject = table.getModel().getValueAt(modelRow, modelColumn);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top