Galera Boa noite. Com as ideias e exemplos que vcs me deram eu consegui fazer o que eu queria que era zebrar a tabela e mudar a cor de uma celula quando selecionada e cheguei a pensar que enfim tinha concluido minha Tabela Dinamica. Porém realizando alguns testes percebi que quando minha tabela possui colunas de valores Integer, Float ou Double o CellRenderer que eu fiz simplismente não funciona. Se eu mando os dados para a Tabela como String o RowSorter não funciona corretamente para as colunas do tipo (Integer, Float e Double).
Annotation criada para mapear os campos que quero mostrar na consulta:
[code]
package comum;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Coluna {
//vamos utilizar esta annotation para pegar o nome da coluna,posicao no jtable e o formato que queremos mostrar
String nome();
int posicao();
Class formato();
}[/code]
Metodo do modelo “que pelo que eu entendi” é responsavel por preencher as colunas (classe: TableModelPadraoParaBean):
@Override
public Class getColumnClass(int c) {
for (Method m : classe.getDeclaredMethods()) {
Coluna col = m.getAnnotation(Coluna.class);
if (col != null && col.posicao() == c) {
return m.getReturnType();
}
}
return null;
}
Bean definido a partir da view criada no banco de dados para ser mostrado na consulta. Classe: (ViewTeste). Segue a baixo o trecho do codigo onde eu seto os valores definidos na Annotation criada.
@Coluna(posicao=0,nome="Codigo", formato=Integer.class)//posicao no jable e o nome para exibir na coluna
public Integer getCliCodigo() {
return cliCodigo;
}
Classe MyCellRenderer responsavel por zebar e permitir o efeito de seleção da Tabela. Essa Classe se encontra dentro da Classe FrmConsulta.
[code]
class MyCellRenderer extends DefaultTableCellRenderer {
private Color whiteColor = new Color(254, 254, 254);
private Color alternateColor = new Color(123, 193, 255);
private Color selectedColor = new Color(61, 128, 223);
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean selected, boolean focused, int row,
int column) {
super.getTableCellRendererComponent(table, value, selected, focused, row, column);
Color bg = null;
// Testa se não existe celula selecionada, se não existir zebra a tabela
if (!selected) {
bg = (row % 2 == 0 ? alternateColor : whiteColor);
} // Testa se existe celula selecionada, se exitir tambem zebra a tabela
else {
// bg = selectedColor;
bg = (row % 2 == 0 ? alternateColor : whiteColor);
}
// Pinta a celula selecionada de amarelo
if (row == table.getSelectedRow() && column == table.getSelectedColumn()) {
bg = Color.YELLOW;
}
setBackground(bg);
// setForeground(selected ? Color.red : Color.black);
return this;
}
}[/code]
Segue anexo tbm o projeto feito no netbeans e o scrip do banco mysql que está dentro da pasta do projeto.