Question

I have written a default table render as follows:

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;
    }
}

To highlight the rows which contain minus values of column 7, I have also set setAutoCreateRowSorter to true. My problem is when I click a header to sort according to it table is sorted but the highlighted row is not changed, therefore a wrong row is highlighted.

How to redraw the table when it is sorted?

Was it helpful?

Solution

the coordinates passed into the renderer are in view coordinate system, you have to convert them to model coordinates before accessing the model:

  int modelRow = table.convertRowIndexToModel(row);
  int modelColumn = table.convertColumnIndexToModel(column);
  cellObject = table.getModel().getValueAt(modelRow, modelColumn);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top