Question

J'ai écrit un rendu de table par défaut comme suit:

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

Pour mettre en surbrillance les lignes contenant moins de valeurs de la colonne 7, j'ai également défini setAutoCreateRowSorter à true. Mon problème est que lorsque je clique sur un en-tête pour trier en fonction du tableau informatique est trié mais que la ligne en surbrillance n'est pas modifiée, donc une mauvaise ligne est mise en évidence.

Comment redessiner la table lorsqu'elle est triée?

Était-ce utile?

La solution

Les coordonnées transmises dans le rendu sont en vue du système de coordonnées, vous devez les convertir en coordonnées de modèle avant d'accéder au modèle:

  int modelRow = table.convertRowIndexToModel(row);
  int modelColumn = table.convertColumnIndexToModel(column);
  cellObject = table.getModel().getValueAt(modelRow, modelColumn);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top