[RESOLVIDO] Colorir varias linhas aleatórias com CellRender

5 respostas
Vinny

Bom achei aqui no GUJ mesmo um tópico sobre o cellRender
dei uma lida coloquei no meu código pra testa e funcionou certinho,
so que eu queria saber se tem como eu estar pintando de cores diferenciadas
algumas linhas aleatórias, assim como o dono do tópico que eu me referenciei queria?
Eu tenho uma JTabel onde mostra as parcelas de uma compra e eu queria colocar em vermelho
somente as que estão atrasadas.

O que eu tentei fazer foi mandar em um vetor com as linhas que eu queria que mudasse de cor, o meu for
começa de zero e vai até o fim da tabela eu fiz assim e não pinta nenhuma linha.

tentei de outros geitos e so consegui pinta uma linha.

Tem como eu fazer isso?

o código que eu estou é o abaixo eu só fiz algumas pequenas modificações
para ver se eu conseguia fazer o que eu preciso.

import java.awt.Color;
import java.awt.Component;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class ColorCellRenderer extends DefaultTableCellRenderer
{
   private Color bg;
   private Color fg;
   private Vector  vetRow;

    public ColorCellRenderer(Color backGround, Color foreGround, Vector vet)
    {
        this.bg = backGround;
        this.fg = foreGround;
        this.vetRow = vet;
    }

    @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);
        for(int i=0; i<table.getRowCount();i++){
            if (i<vetRow.size() && i == vetRow.get(i)){
                comp.setBackground(bg);
                comp.setForeground(fg);
            }else{
                comp.setBackground(table.getBackground());
                comp.setForeground(table.getForeground());
            }
        }
        if(isSelected)
        {
            comp.setBackground(table.getSelectionBackground());
            comp.setForeground(table.getSelectionForeground());
        }
        return comp;
   }

}

referente a este tópico:
http://www.guj.com.br/posts/list/138432.java#744682

5 Respostas

Vinny

Alguém?

sergiotaborda

Se o seu objeto é uma parcela vc deveria ter um método isAtrasada. Ai é só fazer

Parcela parcela = (Parcela)object;

(...) // o mesmo seu codigo 

if( parcela.isAtrasada()){
   comp.setBackground(Color.RED);
}
Vinny

Já tentei fazer isso
mais desse jeito ai só pinta uma linha
e não todas que tem que pintar.

M

Vinny:
Já tentei fazer isso
mais desse jeito ai só pinta uma linha
e não todas que tem que pintar.

Então há algo errado. Entenda que o getTableCellRendererComponent é chamado para cada célula da JTable, não sendo necessário criar um laço de repetição dentro desse método. Basta você verificar se aquela célula específica deve ficar em vermelho (através de um atributo do objeto que está nela) e, caso realmente precise, mudar sua cor (assim como o Sérgio já explicou acima).

Vinny

Bom consegui obrigado sergiotaborda e marcobiscaro2112, eu não tinha conseguido antes comparando pela coluna pq eu estavando comparando o valor que tinha na minha como objeto, ou seja tava vendo se um objeto era igual uma string, não ia da certo nunca.
eu so converte o objeto para String e funcionou certinho o código fico assim:

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class ColorCellRenderer extends DefaultTableCellRenderer
{
   private Color bg;
   private Color fg;

    public ColorCellRenderer(Color backGround, Color foreGround)
    {
        this.bg = backGround;
        this.fg = foreGround;
    }

    @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 (table.getValueAt(row, 5).toString().equals("* * ATRASADA * *")){
            comp.setBackground(bg);
            comp.setForeground(fg);
        }else{
            comp.setBackground(table.getBackground());
            comp.setForeground(table.getForeground());
        }
        
        if(isSelected)
        {
            comp.setBackground(table.getSelectionBackground());
            comp.setForeground(table.getSelectionForeground());
        }
        return comp;
   }

}

Valeu pela ajuda!

Abraço

Criado 25 de fevereiro de 2010
Ultima resposta 25 de fev. de 2010
Respostas 5
Participantes 3