Boa noite,
Minha duvida é a seguinte uso este método para mudar as cores das linhas de uma JTable:
// renderização das linhas da tabela = mudar a cor
tabela.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (row % 2 == 0) {
setBackground(Color.WHITE);
} else {
setBackground(Color.LIGHT_GRAY);
}
return this;
}
});
Porém quando ativo este método, ao selecionar uma linha, ele seleciona célula por célula. No caso antes de usa o método, selecionava a linha inteira e gostaria que permanece selecionado toda linha.
Alguém sabe como fazer isso?
Att
Você também deve tratar a pintura quando o parâmetro isSelected estiver ativo.
Dica: Os parâmetros não estão lá por acaso.
// renderização das linhas da tabela = mudar a cor
tabela.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (isSelected) {
setBackground(Color.BLUE);
} else if (row % 2 == 0) {
setBackground(Color.WHITE);
} else {
setBackground(Color.LIGHT_GRAY);
}
return this;
}
});
[quote=ViniGodoy]Você também deve tratar a pintura quando o parâmetro isSelected estiver ativo.
Dica: Os parâmetros não estão lá por acaso.
// renderização das linhas da tabela = mudar a cor
tabela.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (isSelected) {
setBackground(Color.BLUE);
} else if (row % 2 == 0) {
setBackground(Color.WHITE);
} else {
setBackground(Color.LIGHT_GRAY);
}
return this;
}
});[/quote]
Muito obrigado amigo, isso mesmo que estava querendo.
E obrigado pela dica.
Abraço
Galera é possível aplicar esse método na minha aplicação?
No meu caso, gostaria que mudasse o background de uma linha quando a tabela fosse atualizada baseada na condição da 5ª coluna!! (valor da 5ª coluna ser igual a 1)
O que eu fiz até o momento foi criar um for para verificar o valor de cada coluna, linha por linha e, caso o valor seja o desejado, mudar a cor da linha inteira!!!
int qtdLinhas = table.getModel().getRowCount();
for(int linha = 0; linha <= qtdLinhas-1; linha++){
int verificador = (Integer) table.getModel().getValueAt(linha, 5);
if(verificador == 1){
//MÉTODO PARA MUDAR O BACKGROUND DA LINHA INTEIRA.
}
}
table.getTableHeader().resizeAndRepaint();
EDIT:
Eu fucei e tentei este jeito, mas muda a cor de todas!!
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
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);
Object ref = table.getValueAt(row, 5);
if (ref != null && (Integer.parseInt(ref.toString()) == 1))
result.setBackground(Color.LIGHT_GRAY);
/**if (row % 2 == 0) {
setBackground(Color.WHITE);
} else {
setBackground(Color.LIGHT_GRAY);
}**/
return result;
}
});
table.getTableHeader().resizeAndRepaint();
Consegui arrumar galera, além de corrigir a sintaxe no if, é precisa adicionar um else para voltar o background normal!!
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
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);
Object ref = table.getValueAt(row, 5);
if (ref != null && (Integer.parseInt(ref.toString())) == 1) {
result.setBackground(Color.LIGHT_GRAY); }
else {
result.setBackground(Color.WHITE);
}
return result;
}
});