RESOLVIDO - mudar as cores das linha de uma jtabel conforme data de vencimento

Boa tarde galera, mais uma vez estou precisando de uma força de vcs, pretendo implementar uma cellrenderes para minha jtable onde terá q pintar as linhas de acordo a seguinte condições , Vencido, A vencer e Quitado, já fiz algo parecido em outra tabela mas usando um campo String onde constava o status para as condições. Para essa tabela eu acho q dever se usando um campo Date onde vem a fazer essas comparações e infelizmente eu não estou conseguindo implementar. Abaixo esta um techo do código q estou usando na tabela de Imóvel.

Deste já agradeço a colaboração de todos. um forte abraço

  @Override
    public Component getTableCellRendererComponent(JTable jtable, Object valor, boolean isSelected,
            boolean hasFocus, int row, int col) {
        super.getTableCellRendererComponent(jtable, valor, isSelected, hasFocus, row, col);
       
        switch (jtable.getValueAt(row, 6).toString()) {
            case "ALUGANDO":
                setBackground(new Color(215,252,252));
                break;
            case "ALUGADO":  
                setBackground(new Color(214,214,253));
                break;
            case "VENDENDO":  
                setBackground(new Color(252,212,252));
                break;
           
        }

Boa tarde galera, para aqueles q tiverem a mesmas dificuldade q tive para implementar TableCellrenderer aqui esta a solução graça a Fernando Generoso

Receber obj = (Receber) ((ConsultaReceberTableModel)jtable.getModel()).getReceber(row); if (obj.getRec_dt_pag() != null) { setBackground(new Color(215,252,252)); } else { Date hoje = new Date(); if (hoje.before(obj.getRec_dt_venc())) { setBackground(new Color(225, 255, 167)); } else { setBackground(new Color(252, 212, 252)); } }

[quote=adsadilson]Boa tarde galera, para aqueles q tiverem a mesmas dificuldade q tive para implementar TableCellrenderer aqui esta a solução graça a Fernando Generoso

Receber obj = (Receber) ((ConsultaReceberTableModel)jtable.getModel()).getReceber(row); if (obj.getRec_dt_pag() != null) { setBackground(new Color(215,252,252)); } else { Date hoje = new Date(); if (hoje.before(obj.getRec_dt_venc())) { setBackground(new Color(225, 255, 167)); } else { setBackground(new Color(252, 212, 252)); } }[/quote]

amigo gostaria da sua ajuda. gostaria de fazer a mesma coisa aqui na minha aplicação. esse codigo que vc postou ele fica na classe render?

Boa noite rcarvalho. sim essa implementa é dentro da Class CellRenderes baixo esta a class completa com a implementação é só vc adaptar a sua necessidade. Qualquer coisa se eu poder ajuda estou por aqui é só mandar uma mensagem.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CellRenderes;

import Bean.Pagar;
import TableModel.ConsultaPagarTableModel;
import java.awt.Color;
import java.awt.Component;
import java.util.Date;
import javax.swing.JTable;
import static javax.swing.SwingConstants.CENTER;
import static javax.swing.SwingConstants.LEFT;
import static javax.swing.SwingConstants.RIGHT;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author kelow
 */
public class ConsultaPagarCellRenderes extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable jtable, Object valor, boolean isSelected,
            boolean hasFocus, int row, int col) {
        super.getTableCellRendererComponent(jtable, valor, isSelected, hasFocus, row, col);

        
        Pagar obj = (Pagar) ((ConsultaPagarTableModel)jtable.getModel()).getPagar(row);
        if (obj.getPag_dt_pag() != null) {
            setBackground(new Color(215,252,252));
        } else {
            Date hoje = new Date();
            if (hoje.before(obj.getPag_dt_venc())) {
                setBackground(new Color(225, 255, 167));
            } else {
                setBackground(new Color(252, 212, 252));
            }
        }


        //Linha selecionada
        if (isSelected) {
            setBackground(Color.BLACK); //Amarelo
            setForeground(Color.WHITE);
        } else {
            setForeground(Color.BLACK);
        }

        //Alinhamento dos dados
        switch (col) {
            case 2:
            case 3:
            case 6:
                setHorizontalAlignment(CENTER);
                break;
            case 0:
            case 4:
            case 5:
            case 7:
                setHorizontalAlignment(RIGHT);
                break;
            default:
                setHorizontalAlignment(LEFT);
                break;
        }

        //Largura das colunas
//        jtable.setSelectionMode(0); //seleciona apenas uma linha
        jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        jtable.getColumnModel().getColumn(0).setPreferredWidth(70);
        jtable.getColumnModel().getColumn(1).setPreferredWidth(200);
        jtable.getColumnModel().getColumn(2).setPreferredWidth(80);
        jtable.getColumnModel().getColumn(5).setPreferredWidth(80);
        jtable.getColumnModel().getColumn(6).setPreferredWidth(80);
        jtable.getColumnModel().getColumn(7).setPreferredWidth(80);
        jtable.getColumnModel().getColumn(8).setPreferredWidth(120);

        //Ocultas as linhas da grade
//        jtable.setShowGrid(false);

        // Alinhamento dos títulos da coluna
        DefaultTableCellRenderer vHeaderRenderer = (DefaultTableCellRenderer) jtable.getTableHeader().getDefaultRenderer();
        vHeaderRenderer.setHorizontalAlignment(SwingUtilities.CENTER);

        return this;
    }
}

Boa noite adsadilson muito obrigado com certeza vai ajudar muito aqui na implementação!

  • não sabia que poderia colocar o alinhamento dentro dentro dessa classe também. rsrsrs

Obrigado! assim que chegar em casa posto o resultado aqui :slight_smile:

boa noite rcarvalho, assim eu tbm não sei se é correto fazer esse tipo de alinhamento dentro dessa class não mais ate quando alguém me orienta a maneira correta de fazer eu vou utilizado desse jeito rsrsrsr.
valeu qualquer coisa q eu pude ajuda estou por aqui blz.

Bom dia adsadilson!,tudo bom? Como eu aplico essas definiçoes ao jtable?

td joia rcarvalho, após implementa a classe Cellrenderes é só seta ela ao jTable fazendo assim tbReceber.setDefaultRenderer(Object.class, new ConsultaReceberCellRenderes()); logo toda as configurações feita na class serão aplicada a tabela como passo de magica.

adsadilson tudo bom amigo? estou querendo fazer que apenas mude de cor uma coluna do jtable. o codigo que eu estou utilizando para colorir é esse

[code]
/**
*

  • @author Romulo
    */
    public class FormatacaoConteudo extends DefaultTableCellRenderer implements TableCellRenderer {

     @Override  
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {  
         super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);  
          
         Receber receber = ((ReceberCredTableModel)table.getModel()).getReceber(row); 
         Calculos calc = new Calculos();
         int atraso = calc.calcularDiasvencidos(receber.getVenci().toString());   
         
             if (atraso>0){
                 //se esta vencido pinta de vermelho
                 setBackground(new Color(255,102,102)); 
             }
             if (atraso<0){
                 //se nao esta vencido pinta de verde
                  setBackground(new Color(153,255,153));
             }
             if (atraso==0){
                 // pinta de amarelo
                  setBackground(new Color(255,255,153));
             }
    

    return this;
    } [/code]

e aplico ao Jtable dessa forma.

TableCellRenderer tcr = new FormatacaoConteudo(); // Pinta apenas a coluna 4 TableColumn column = jTable4.getColumnModel().getColumn(4); column.setCellRenderer(tcr);

sendo que eu queria já colocar isso dentro do CellRender

public class ReceberCellRenderes extends DefaultTableCellRenderer {  
  
    @Override  
    public Component getTableCellRendererComponent(JTable jtable, Object valor, boolean isSelected,  
            boolean hasFocus, int row, int col) {  
        super.getTableCellRendererComponent(jtable, valor, isSelected, hasFocus, row, col);  
  
          
        Receber receber = (Receber) ((ReceberCredTableModel)jtable.getModel()).getReceber(row);  
            // ??????????????? como pintar apenas a coluna que eu quero ??????????????
            Calculos calc = new Calculos();
            int atraso = calc.calcularDiasvencidos(receber.getVenci().toString());   
            
                if (atraso>0){
                    //se esta vencido pinta de vermelho
                    setBackground(new Color(255,102,102)); 
                }
                if (atraso<0){
                    //se nao esta vencido pinta de verde
                     setBackground(new Color(153,255,153));
                }
                if (atraso==0){
                    // pinta de amarelo
                     setBackground(new Color(255,255,153));
                }

        //=====================================
        if (isSelected) {  
            setBackground(Color.BLACK); //Amarelo  
           setForeground(Color.WHITE);  
        } else {  
            setForeground(Color.BLACK);  
        }  
      
        //Alinhamento dos dados  
        switch (col) {  
            case 2:  
            case 3:  
            case 6:  
                setHorizontalAlignment(CENTER);  
                break;  
            case 0:  
            case 4:  
            case 5:  
            case 7:  
                setHorizontalAlignment(RIGHT);  
                break;  
            default:  
                setHorizontalAlignment(LEFT);  
                break;  
        }  
        //---------------------------------------------------------------------
        //Largura das colunas  

        jtable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);  
        jtable.getColumnModel().getColumn(0).setPreferredWidth(20); //checkbox
        jtable.getColumnModel().getColumn(1).setPreferredWidth(180); //documento  
        jtable.getColumnModel().getColumn(2).setPreferredWidth(70); //valor
        jtable.getColumnModel().getColumn(3).setPreferredWidth(80); //lancamento
        jtable.getColumnModel().getColumn(4).setPreferredWidth(40); //lancamento
        jtable.getColumnModel().getColumn(5).setPreferredWidth(80); //lancamento

        //----------------------------------------------------------------------------- 
        //Ocultas as linhas da grade  
        //jtable.setShowGrid(false);  
  
        // Alinhamento dos títulos da coluna  
        DefaultTableCellRenderer vHeaderRenderer = (DefaultTableCellRenderer) jtable.getTableHeader().getDefaultRenderer();  
        vHeaderRenderer.setHorizontalAlignment(SwingUtilities.CENTER);  
  
        return this;  
    }  

Obrigado!

Boa noite galera, é seguinte eu consegui resolver a questão de pintar as linhas da jtable de acordo os vencimentos, mais infelizmente fica uma coluna sem pinta justamente pq ela é do tipo boolean alguém ai sabe como resolver esse probleminha gostaria q ela tbm fosse pintada, abaixo deixo a imagem de conta ela ta.

[quote=adsadilson]Boa noite galera, é seguinte eu consegui resolver a questão de pintar as linhas da jtable de acordo os vencimentos, mais infelizmente fica uma coluna sem pinta justamente pq ela é do tipo boolean alguém ai sabe como resolver esse probleminha gostaria q ela tbm fosse pintada, abaixo deixo a imagem de conta ela ta.
[URL=http://imageshack.com/f/ezhM121Lp][/URL]
[URL=http://imageshack.com/f/ezhM121Lp][/URL][/quote]