jtable cellrenderer changements backgroundcolor de cellules lors de l'exécution

Je suis en train de créer un tableau et de la couleur spécifique des cellules de couleur jaune, rouge ou blanc, selon le contenu des autres colonnes. Pour cela, je suis en boucle sur les lignes de remplissage dans les valeurs et puis vérification sur le contenu. qui fonctionne très bien pour chaque ligne qui est actuellement affichée sur l'écran, mais lorsque le programme atteint les lignes qui ne sont pas affichés ou si l'utilisateur est à essayer pour faire défiler toutes les cellules de l'évolution de ses backgroundcolor revenir au blanc. J'ai cherché sur le web pour des solutions de, et la seule idée qui semblait raisonnable est de réinitialiser le cellRenderer après chaque tour de boucle, qui ne fonctionne pas car il remet à chaque cellule.

J'espère que quelqu'un connait une solution pour ce ou peut me donner une idée de l'endroit où j'ai brouillard sur quelque chose.

Je suis à l'aide de cette boucle

for(int e = 0; e < modules.size(); e++)
    {
    gui.clearOutputStream();
    gui.getOutputStream().setText("Load Modul " + modules.get(e) + "\r\n");
    version = getVersion(modules.get(e));

    //Update current Row
    updateRow(gui.getReleaseTabelle(), e);
    }

qui appelle cette méthode

public void updateRow(JTable target, int row){
//...
//insert Values here
//...
CustomRenderer cr = new CustomRenderer();
        cr.tab = target;
        if(!target.getValueAt(row, 2).equals(target.getValueAt(row, 3)))
        {
            cr.Val1 = target.getValueAt(row, 1).toString();
            target.setValueAt("X", row, 1);
        }
        else if(!target.getValueAt(row, 7).equals(""))
        {
            cr.Val1 = target.getValueAt(row, 1).toString();
            target.setValueAt("Y", row, 1);
        }
        else
        {

        }
        target.getColumnModel().getColumn(1).setCellRenderer(cr);

}

et c'est mon CustomRenderer

class CustomRenderer extends DefaultTableCellRenderer 
    {
private static final long serialVersionUID = 6703872492730589499L;
        public String Val1; 
        public JTable tab;

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            if(tab.getValueAt(row, 1).equals("Y")){
                cell.setBackground(new java.awt.Color(255, 255, 0));
                tab.setValueAt(Val1, row, 1);
            }
            else if(tab.getValueAt(row, 1).equals("X")){
                cell.setBackground(new java.awt.Color(255, 50, 50));
                tab.setValueAt(Val1, row, 1);
            }
            else
            {
                //do nothing
            }
            return cell;
        }
    }
pour mieux aider plus tôt post un SSCCE, bref, praticable, compilable
Dans votre CustomRenderer de la classe onglet.setValueAt(Val1, ligne, 1); est-il. Pourquoi est-ce qui est énoncé? Vous devez utiliser votre CustomRenderer classe uniquement pour le rendu des couleurs. Vous êtes en train de réinitialiser quelque chose ici, dans le table. C'était peut-être le problème.
cependant, lorsque le programme atteint les lignes qui ne sont pas affichés ou si l'utilisateur est à essayer pour faire défiler toutes les cellules de l'évolution de ses backgroundcolor revenir au blanc. où vous logique est la faute qui est à l'origine du problème.
jamais de changer de table, modèle à un rendu
bon j'ai trouvé une solution après que vous les gars m'a dit de ne pas changer quoi que ce soit sur la table dans le moteur de rendu, qui m'ont forcé à quitter les valeurs et vérifier les autres colonnes de dans le moteur de rendu (ce qui est totalement possible par table.getValueAt(ligne, colonne)), aussi j'ai dû modifier le dernier d'autre de la cellule.setBackground(new java.awt.Colo(255, 255, 255)); au lieu de ne rien faire. ma dernière asumption était juste, mais je n'aurais jamais eu l'idée de passer de tes commentaires. merci Che et kleopatra 🙂

OriginalL'auteur Steffen Riek | 2013-01-28