jtable cellrenderer zmienia kolor tła komórek podczas działania

Próbuję utworzyć tabelę i komórki specyficzne dla koloru, żółte, czerwone lub białe, w zależności od zawartości innych kolumn. W tym celu zapętlam wiersze wypełniając wartości, a następnie sprawdzam zawartość. działa to dobrze dla każdego wiersza aktualnie wyświetlanego na ekranie, jednak gdy program osiągnie wiersze, które nie są wyświetlane lub jeśli użytkownik próbuje przewinąć każdą komórkę, zmienia kolor tła na biały. Szukałem rozwiązań w sieci i jedynym pomysłem, który brzmiał rozsądnie, było zresetowanie renderera komórki po każdej pętli, co nie działa, ponieważ resetuje również każdą komórkę.

Mam nadzieję, że ktoś zna rozwiązanie tego problemu lub może dać mi pomysł, gdzie coś wymyślić.

Używam tej pętli

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

który wywołuje tę metodę

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

}

a to jest mój 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;
        }
    }

questionAnswers(1)

yourAnswerToTheQuestion