Pregunta

He escrito una tabla predeterminada de la siguiente manera:

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

Para resaltar las filas que contienen valores menos de la columna 7, también he establecido setAutoCreateRowSorter en true.Mi problema es cuando hago clic en un encabezado para ordenar según la tabla de TI está ordenada, pero la fila resaltada no se cambia, por lo tanto, se resalta una fila incorrecta.

¿Cómo redimir la mesa cuando está ordenada?

¿Fue útil?

Solución

las coordenadas pasadas al renderizador están en el sistema de coordenadas de vista, debe convertirlas en coordenadas del modelo antes de acceder al modelo:

  int modelRow = table.convertRowIndexToModel(row);
  int modelColumn = table.convertColumnIndexToModel(column);
  cellObject = table.getModel().getValueAt(modelRow, modelColumn);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top