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

10 respostas
A

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;
           
        }

10 Respostas

A

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)); } }

R

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)); } }

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?

A

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;
    }
}
R

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:

A

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.

R

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

A

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.

R
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
/**
 *
 * @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;  
        }

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!

A

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.

A

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]

Criado 6 de novembro de 2013
Ultima resposta 10 de ago. de 2014
Respostas 10
Participantes 2