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