JTable - Refresh/Repaint rows

4 respostas
J

Olá,

Tenho uma JTable que extende AbstractTableModel.
Essa JTable é alimentada com dados e conforme o tipo deles, a cor da linha é setada. Por exemplo vermelho.

Porem, quando faço uma nova leitura a tabela não “repinta” as linhas de vermelho, como acontece na leitura inicial.

Alguem já passou por esse problema? :frowning:

4 Respostas

J

juliospark:
Olá,

Tenho uma JTable que extende AbstractTableModel.
Essa JTable é alimentada com dados e conforme o tipo deles, a cor da linha é setada. Por exemplo vermelho.

Porem, quando faço uma nova leitura a tabela não “repinta” as linhas de vermelho, como acontece na leitura inicial.

Alguem já passou por esse problema? :frowning:

Já fiz algo exatamente assim e não tive problemas.
Mas o que você quer dizer com “nova leitura”?
Seria depois de aberta a tela com JTable aí você digamos uma consulta pra tabela mostrar novos dados filtrados, e estes aí não vem coloridos?

mas pior que não tem muito mistério, depois de instanciada a JTable, o que eu sempre fazia durante as atualizações da tabela era sempre chamar o método:

você está chamando este método? senão faça isso ao final de cada operação que possa atualizar a JTable e vê se resolve.

J

Isso, por exemplo: Quando clico no botão “Ler”, deve atualizar as cores das linhas, conforme minhas regras na classe que extende a TableCellRenderer

Pois é, já coloquei JTable.updateUI(), validate() e repaint();
Testei todos separados e até agora não consegui sucesso.

Preciso sobrescrever algum método na TableCellRenderer ou na AbstractTableModel?

J

Isso, por exemplo: Quando clico no botão “Ler”, deve atualizar as cores das linhas, conforme minhas regras na classe que extende a TableCellRenderer

Pois é, já coloquei JTable.updateUI(), validate() e repaint();
Testei todos separados e até agora não consegui sucesso.

Preciso sobrescrever algum método na TableCellRenderer ou na AbstractTableModel?

na verdade eu fiz assim:

// durante os sets da minha JTable, um destes foi
//Veja que DefaultTableCellRenderer() devolve um objeto DefaultTableCellRenderer
table.setDefaultRenderer(Object.class,  MyDefaultTableCellRenderer());

e dentro dessa mesma classe onde instanciei a JTable eu fiz um método pra devolver um DefaultTableCellRenderer onde eu implementei numa classe interna um método, veja:

private DefaultTableCellRenderer MyDefaultTableCellRenderer(){
		return new DefaultTableCellRenderer(){
			
			public Component getTableCellRendererComponent(
					JTable table, Object obj, boolean isSelected, 
					boolean hasFocus, int row, int column) {
				Component renderer = super.getTableCellRendererComponent(table, obj, 
						isSelected, hasFocus, row, column);
    //Aqui minha regra de negócio pra aplicar cores
				Status status = getStatus(row);
    //status.getRowColor() devolve uma cor de acordo com minhas regras
				setBackground(status.getRowColor());
				return renderer;
			}
			
		};
	}

foi tudo que precisei fazer pra colorir, e para cada uma devolver uma cor diferente de acordo com as regras.

isso foi tudo que eu fiz

J

Resolvi o problema, mas havia esquecido postar a solução.
Então, aqui está:

Obrigado.

Criado 19 de fevereiro de 2009
Ultima resposta 2 de mar. de 2009
Respostas 4
Participantes 2