Ajuda Pintar linha JTable

Bom to seguindo alguns exemplos aqui do GUJ mais garrei aqui no método nao sei como implementar, me ajudem?

[code]package com.mascarenhas.model.tables;

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

import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class MyCellRenderer implements TableCellRenderer {

private Color cor1;
private Color cor2;

public MyCellRenderer(){
	
	this.cor1 = Color.BLUE;
	this.cor2 = Color.WHITE;
	
}


@Override
public Component getTableCellRendererComponent(JTable arg0, Object arg1,
		                                      boolean arg2, boolean arg3, int row, int column) {
	
                           // isso foi o que eu pensei quando row for par colore de uma cor quando nao de outra. Mas nao sei se estar certo
	if(row % 2 == 0){
		

					
	}
	
}

}[/code]

aqui como estou chamando a class mas tb nao se se esta certo :frowning:

[code]package com.mascarenhas.model.tables;

import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

import com.mascarenhas.view.Contrato1;

public class ColorirLinhaTable {

public void getColorir(){
	
TableCellRenderer cellRenderer = new MyCellRenderer();
	
	int rowCount = Contrato1.jTable.getRowCount();
	
	for(int i = 0; i < rowCount; i++){
		
		TableColumn column =  Contrato1.jTable.getColumnModel().getColumn(i);   // aqui ele ta pegando a coluna nao e nao? Nao teria que pegar a linha?
		column.setCellRenderer(cellRenderer);  
		
	}
	
	
}

}[/code]

[code]

São 2 lugares que você precisa verificar:
1 - Setar qual renderer vai utilizar:

objeto_tabela.setDefaultRenderer(Object.class, new SuaClasseTableCellRenderer());

2 - Modificar o renderer para mudar a cor de fundo.

if(row%2==0)
    c.setBackground(new Color(240,240,240));
else
    c.setBackground(new Color(255,255,255));

entendi sua segunda parte:

2 - Modificar o renderer para mudar a cor de fundo. view plaincopy to clipboardprint? if(row%2==0) c.setBackground(new Color(240,240,240)); else c.setBackground(new Color(255,255,255)); if(row%2==0) c.setBackground(new Color(240,240,240)); else c.setBackground(new Color(255,255,255));

a primeira nao tendi =/

alguem ajuda?

Eu utilizo um método para fazer isso, geralmente eu preencho primeiro o Modelo do jTable e logo depois chamo este método:

private void addCor() {
        // minha table se chama jTable1, se precisar troque o nome
        jTable1.setDefaultRenderer(Object.class, new javax.swing.table.DefaultTableCellRenderer() {   
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {   
        super.getTableCellRendererComponent(jTable1, value, isSelected, hasFocus, row, column);   
            // aqui você coloca a condição para pintar a linha, neste caso se o valor da coluna 4 da linha for menor que 2 (table.getValueAt(row,4), aqui table é o nome que está no parametro ali em cima, row é a linha atual da verificação)
            if (Float.valueOf(table.getValueAt(row, 4).toString()) < 2) {   
                // nesses casos eu coloco o background como vermelho
                setBackground(Color.RED);
                // caso contrário nao tem background
            } else { setBackground(null); }
        return this;   
    }});
    }

Espero que isso ajude :slight_smile:

Sei que é um pouco antigo este tópico mais estava quebrando a cabeça com o JTable, e este código funcionou pois quero usar com o Default sem precisar montar a tabela na mão com o TableModel pelo que estava entendendo com os outros fóruns o Default não pintaria a linha e tem poucos recursos, mas com este método addcor() pintou a linha sim.

valeu…

Se for pintar apenas celulas dependendo da condição.
Eu apanhei mas consegui… segue:

jTable1.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            public Component getTableCellRendererComponent(JTable table, Object value,  
                    boolean isSelected, boolean hasFocus, int row, int column) {  
               
                Component cell2 = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                Object ref2 = table.getValueAt(row, jcoluna_setup);
                Object ref = table.getValueAt(row, jcoluna_percentual);//coluna percentual

                if (ref2 != null && Integer.parseInt(ref2.toString().substring(3, 5)) >= 05 && column == jcoluna_setup) {  
                    cell2.setForeground(Color.WHITE);
                    cell2.setBackground(Color.red);
                }
                else if (ref != null && Integer.parseInt(ref.toString().substring(0, 2)) <= 75 && column == jcoluna_percentual) {  
                        cell.setForeground(Color.WHITE);
                        cell.setBackground(Color.red);
                }
                else if (ref != null && Integer.parseInt(ref.toString().substring(0, 2)) >= 130 && column == jcoluna_percentual) {  
                        cell.setForeground(Color.WHITE);
                        cell.setBackground(Color.blue);
                        JOptionPane.showMessageDialog(rootPane,"Percentual acima de 130%, você tem certeza disso? ");
                }
                else {  
                    cell2.setForeground(Color.BLACK);
                    cell2.setBackground(Color.WHITE);
                } 

                    return this;}
    });