[RESOLVIDO] Como alternar cores das linhas do JTable

Tem como no JTable alternar as cores das linhas?
Por exemplo, 1ª linha verde, 2ª linha branca, 3ª linha verde…

Sei que dá pra mudar a cor selecionando uma linha conforme o valor da coluna.

Estava pensando em fazer algo do tipo colocando uma coluna não visível, aí se ela for ímpar terá tal cor e se for par outra… Tem como fazer isso da coluna invisível?
Devo estar viajando rs

Olha, tem BASTANTE tempo que não trabalho com Swing mas, na época em que trabalhei, isso era feito com os Renderers (não deve ter mudado). No Swing tudo que se diz respeito à renderização (ie. apresentação do componente) fica a cargo dos Renderers.

Numa pesquisada rápida, achei isso: http://stackoverflow.com/questions/3875607/change-the-background-color-of-a-row-in-a-jtable e isso http://tips4java.wordpress.com/2010/01/24/table-row-rendering/

Deixei para depois por ser um diferencial no trabalho… E enquanto isso fui arrumando outras classes…

E quando voltei para esse assunto achei esse vídeo que à partir dos 6:45 começa a mostrar como fazer http://www.youtube.com/watch?v=xvhFqM6qTQY&feature=share&list=PLTHYycROn5oIpllleLD20_DFyjMzc1MTH

Deu certo, porém as minhas linhas da tabela ficaram vazias

Depois coloco os códigos aqui (;

Manda vê:
Obs.: Joga esse código no método de carregar sua Jtable.
Obs.: No meu caso minha Jtable chama RdiGrid
Obs.: No meu caso eu mudo a cor da linha de acordo com o texto da coluna “Status”

RdiGrid.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus, int row, int column) {
                super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                //A coluna do status é 3
                Object ref = table.getValueAt(row, 3);//Coluna Status
                //Coloca cor em todas as linhas,COLUNA(3) que tem o valor "Aberto"
                if (ref != null && ref.equals("Aberto")) {//Se Status for igual a "Aberto"
                    setBackground(Color.RED);//Preenche a linha de vermelho
                    setForeground(Color.WHITE);//E a fonte de branco
                } else {
                    boolean sel = isSelected;
                    if (sel == true) {
                        setBackground(getBackground());
                        setForeground(getForeground());
                    } else {//Se Status não for "Aberto" 
                        setBackground(Color.WHITE);//Preenche a linha de branco
                        setForeground(new Color(51, 51, 51));//E a fonte de preto
                    }
                }
                return this;
            }
        });

Espero ter ajudado!

[quote=fabio.argenton]Manda vê:
Obs.: Joga esse código no método de carregar sua Jtable.
Obs.: No meu caso minha Jtable chama RdiGrid
Obs.: No meu caso eu mudo a cor da linha de acordo com o texto da coluna “Status”

RdiGrid.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus, int row, int column) {
                super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                //A coluna do status é 3
                Object ref = table.getValueAt(row, 3);//Coluna Status
                //Coloca cor em todas as linhas,COLUNA(3) que tem o valor "Aberto"
                if (ref != null && ref.equals("Aberto")) {//Se Status for igual a "Aberto"
                    setBackground(Color.RED);//Preenche a linha de vermelho
                    setForeground(Color.WHITE);//E a fonte de branco
                } else {
                    boolean sel = isSelected;
                    if (sel == true) {
                        setBackground(getBackground());
                        setForeground(getForeground());
                    } else {//Se Status não for "Aberto" 
                        setBackground(Color.WHITE);//Preenche a linha de branco
                        setForeground(new Color(51, 51, 51));//E a fonte de preto
                    }
                }
                return this;
            }
        });

Espero ter ajudado![/quote]

Bom dia, ajudou!!Agora funcionou (;

Obrigada fabio.argenton

Eu apenas acrescentei a linha super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
meu código ficou assim:

[code]package br.com.TableModel;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class TableCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(row % 2 == 0 ){
setBackground(Color.LIGHT_GRAY);
}else{
setBackground(null);
setForeground(new Color(51, 51, 51));
}

if(isSelected){
	setBackground(Color.GREEN);
	setForeground(getForeground()); 
}
	
table.getColumnModel().getColumn(0).setMaxWidth(50);
table.getColumnModel().getColumn(1).setMaxWidth(500);
table.getColumnModel().getColumn(2).setMaxWidth(70);
table.getColumnModel().getColumn(3).setMaxWidth(50);
table.getColumnModel().getColumn(4).setMaxWidth(50);


return this;

}
}[/code]