DefaultTableCellRenderer [RESOLVIDO]

Olá…
Tenho uma JTable que possuirá várias cores nas linhas… já criei uma classe extendendo DefaultTableCellRenderer que pinta a linha mas só consigo pintar de uma em uma, ou seja, apenas 1 linha estará pintada…
aí vai a classe:

public class ColorCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer{

	private Color colorBackground;
	private int row;
	private Color colorForeground;

	public ColorCellRenderer(Color colorBackground, 
			Color colorForeground,
			int row){
		setOpaque(true);
		this.colorBackground=colorBackground;
		this.row=row;
		this.colorForeground=colorForeground;
	}

	public Component getTableCellRendererComponent(
			JTable table, Object value,
			boolean isSelected, boolean hasFocus, 
			int row, int column){
		if (isSelected) {
			this.setBackground(Color.cyan);
			this.setForeground(Color.white);
		}else {
			if (row == this.row) {
				this.setBackground(colorBackground);
				this.setForeground(colorForeground);
			}else {
				this.setBackground(null); //preciso que esta cor (ao invés de voltar ao normal) fique na cor que estava antes..
				this.setForeground(null); //por exemplo: se a cor da linha era amarela, deve ficar amarela e não voltar ao padrão branco
			}
		}
		this.setText(value.toString());
		return this;
	}
}

e outra… mesmo que eu consiga pintar apenas uma linha ignorando as outras, eu utilizaria esta classe para cada linha pintada (dentro dum for, por exemplo), ou faria um render para cada caso em especial?
desde já obrigado…

A JTable irá chamar esse método para cada linha que for pintar. Não é necessário fazer o for manualmente.

O que você precisa fazer, se for colorir várias linhas, é substituir aquele if (row == this.row), por um if que entre ali para toda linha que tiver que ser pintada.

exatamente por isso que eu achei que ficaria ruim…
é que eu queria implementar TableCellRenderer de uma forma que eu possa trocar a cor da linha em tempo de execução…
utilizando esta ColorCellRenderer eu faria:

table.setDefaultRenderer(Object.class, new ColorCellRenderer(Color.blue, Color.black, 0));
table.updateUI();

para setar o background da linha 0 azul e a fonte preta em tempo de execução…

a forma correta seria implementar um TableCellRenderer para cada caso então??
e quando eu troco as linhas em tempo de execução eu perco configurações da jTable setadas anteriormente… exemplo: se eu tenho o modo de seleção única

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

depois de eu trocar a cor esta propriedade é perdida… isso é normal?
obrigado…

é normal a table perder as propriedades depois de trocar a cor da linha?

Eu faço assim:

public class ColorRenderer extends DefaultTableCellRenderer 
{  
   private Color color1;
   private Color color2;

    public ColorRenderer(Color color1, Color color2)
    {
        this.color1 = color1;
        this.color2 = color2;
    }
    public ColorRenderer()
    {
        this.color1 = Color.WHITE;
        this.color2 = Color.LIGHT_GRAY;
    }

    @Override
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
   {  
        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);  
        if (row % 2 == 0)
            comp.setBackground(color2);
        else
          comp.setBackground(color1);
        if(isSelected)
        {
            comp.setBackground(table.getSelectionBackground());
            comp.setForeground(table.getSelectionForeground());
        }
        return comp;
   }  
   
}

e quando se instanciar uma jTable :

jTable1 = new javax.swing.JTable()
{
    public java.awt.Component prepareRenderer(javax.swing.table.TableCellRenderer renderer,int rowIndex, int vColIndex)
    {
        java.awt.Component c = super.prepareRenderer(new ColorRenderer(Color.WHITE, new Color(235, 233, 233)), rowIndex, vColIndex);
        return c;
    }
};

hehehehe…
é… faz tempo… ja resolvi o problema…

AHUahUAHuahuHAUhauHAUA