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