Bom dia, pessoal.
Estou tentando fazer com que todas as linhas da coluna 0 de uma tabela fiquem com a cor vermelha, o background, a cor da letra pode ser preta mesmo. Para começar, peguei parte do código de um cara daqui mesmo do fórum, mas não estou conseguindo fazer ele funcionar, será que alguém poderia me dar uma ajuda?
//Classe Renderizador.java
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class Renderizador extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component result = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// Essas cores são só para testar, se desse certo, ajeitaria do modo que gostaria.
if (isSelected)
{
result.setFont(new Font("arial", Font.BOLD, 12));
result.setForeground(Color.white);
result.setBackground(Color.blue);
} else
{
result.setFont(new Font("arial", Font.PLAIN, 12));
result.setForeground(Color.gray);
result.setBackground(Color.black);
}
// Coloquei isso para alinhar tudo que vai ser mostrado na tabela no centro de cada célula.
this.setHorizontalAlignment(CENTER);
return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
}
}
//Classe Interface.java
//Aqui tem parte do código que é desnecessário mostrar.
// "tab" é um
private Tabela tab = new Tabela();// Tabela é um AbstractTableModel a instanciação de JTable eu não mostrei aqui
this.jTable1.setModel(tab);
// Mostra a tabela com os valores centralizados corretamente, só que com todas as células pintadas.
// Eu só queria as da coluna 0.
this.jTable1.setDefaultRenderer(Object.class, new Renderizador());
Cara, eu mudei o código e deixei do jeito que está abaixo e continua a mesma coisa. Se eu mudar o valor de zero para um, somente a primeira célula do canto superior esquero fica branca, ou default, o resto da tabela fica toda vermelha. Se eu puser “column == 2” as células 1 e 2 da primeira linha ficam brancas, o resto fica vermelho!
Realmente não sei o que está acontecendo.
[code] public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
O que ocorre é que ele reaproveita o componente entre uma chamada e outra. Portanto, uma vez que você deixou o componente vermelho, ele vai ficar vermelho até que você o torne branco novamente.
O que ocorre é que ele reaproveita o componente entre uma chamada e outra. Portanto, uma vez que você deixou o componente vermelho, ele vai ficar vermelho até que você o torne branco novamente.[/quote]
Agora sim!
Mas qual a diferença disso para aquilo que o marlon sugeriu?
Eu mesmo respondo a pergunta que fiz!
Faltou o “else” no código sugerido pelo Marlon, coloquei como está abaixo e funcinou também:
[code]public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(column == 0)
{
component.setBackground(Color.red);
}
else
{
component.setBackground(Color.blue);
}
//Pinta de cinza todas as células da primeira coluna.
//component.setBackground(column == 0 ? Color.GRAY : Color.WHITE);
// Centraliza o que vai ser mostrado na tablela.
this.setHorizontalAlignment(CENTER);
return component;
}[/code]