JTable Render... Cor de uma celula de acordo com valor de outra

1 resposta
extreme_z3r0
Olá pessoal estou montando uma tabela para exibir "Contas" ou despesas como preferirem... Preciso alterar a cor da coluna vencimento somente se a coluna estado estiver marcada em não pago. Fiquei tentando e ja consegui isso aqui:
package testes.table.contratte;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.text.ParseException;
import java.util.Date;

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

import model.Funcoes;
import model.VariaveisDeSistema;

/**
 * @author Gabriel Saraiva
 * 
 */
public class DespesasTableCellRenderer extends DefaultTableCellRenderer {
	
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		
		Component celula = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		Color bg1 = new Color(232, 242, 254);
		Color bg2 = new Color(255, 255, 255);
		Color bgPago = new Color(210, 255, 220);
		Color bgNaoPago = new Color(255, 210, 220);
		Color bgSelecionado = new Color(179, 224, 253);
		Color fgPago = new Color(10, 55, 20);
		Color fgNaoPago = new Color(55, 10, 20);
		Color fgSelecionado = new Color(0, 0, 100);
		
		Color fg = celula.getForeground();
		
		if (row % 2 == 0) {
			celula.setForeground(Color.BLACK);
			celula.setBackground(bg1);
		} else {
			celula.setForeground(Color.BLACK);
			celula.setBackground(bg2);
		}
		if (value.equals("NÃO PAGO")) {
			
			celula.setForeground(fgNaoPago);
			celula.setBackground(bgNaoPago);
		}
		
		String hoje = Funcoes.formatadorDeDatasParaPtBr.format(new java.util.Date());
		
		if (value.equals(hoje) && column == 2) {
			celula.setBackground(VariaveisDeSistema.COR_DESTAQUE_MAX);
		}
		
		if (column == 2) {
			try {
				Date data = Funcoes.formatadorDeDatasParaPtBr.parse(value.toString());
				if (data.after(new Date())) {
					celula.setBackground(VariaveisDeSistema.COR_AVISO_1);
				}
			} catch (ParseException e) {
				
			}
			
			
		}
		
		if (isSelected) {
			celula.setBackground(bgSelecionado);
			celula.setForeground(fgSelecionado);
		}
		
		return celula;
		
	}
}

Que gera isso:[img]http://img210.imageshack.us/img210/7259/10965427.jpg[/img]

O meu problema é exemplificado na 3ª linha onde o campo vencimento está em rosa (destaque) e o estado está marcando PAGO, não consigo bolar uma maneira de fazer com que ele fique sem marcar quando ja estiver pago sem usar [color=cyan]gambiarra[/color] recurso técnico provisorio...

Bom... se alguem puder me ajudar!!! VLWW! ^^ hehe

1 Resposta

ViniGodoy

Esse if não está invertido?

Não deveria ser:

Outra coisa que você pode fazer é pedir para o Table o seu TableModel e, a partir da linha, obter o objeto inteiro que está sendo representado na tabela. Assim vc pode testar qualquer campo, e não precisa reproduzir a lógica de negócio (como no caso desse if), dentro do seu renderer.

Criado 17 de outubro de 2009
Ultima resposta 17 de out. de 2009
Respostas 1
Participantes 2