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 
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]