jtable cellrenderer меняет цвет фона ячеек во время работы

Я пытаюсь создать таблицу и цвет отдельных ячеек, желтый, красный или белый, в зависимости от содержимого других столбцов. Для этого я перебираю строки, заполняя значения, а затем проверяю содержимое. это прекрасно работает для каждой строки, которая в данный момент отображается на экране, однако, когда программа достигает строк, которые не отображаются, или если пользователь пытаетсяs для прокрутки каждой ячейки меняет цвет фона на белый. Я искал в Интернете решения, и единственной разумной идеей было сбрасывать cellRenderer после каждого цикла, который не работает, потому что он также сбрасывает каждую ячейку.

Я надеюсь, что кто-то знает решение для этого или может дать мне идею, где я обдумываю что-то.

Я использую этот цикл

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

который вызывает этот метод

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

}

а это мой 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;
        }
    }

Ответы на вопрос(1)

Ваш ответ на вопрос