JTable atualização de conteúdo após autoCreateRowSorter

4 respostas
M

Olá Amigos,

tenho uma JTable que utilizo o método autoCreateRowSorter() para ordenar os dados da tabela de acordo com a coluna clicada pelo mouse. A ordenação é bem sucedida, porém, quando tento capturar a linha selecionada da tabela, recebo a linha com os dados antigos, ou seja, antes de ter sido ordenada pelo click do mouse.

Conforme o exemplo abaixo:

DefaultTableModel modelo = (DefaultTableModel) controleBoletim.frame.tabelaVisitas.getModel();

//Captura a linha selecionada na tabela
linhaSelecionadaVisitas = controleBoletim.frame.tabelaVisitas.getSelectedRow();

Por exemplo:
Antes de ordenar:
Clico na linha 1 com o valor 1 na primeira coluna, a linha capturada tem a primeira coluna com valor 1.
Depois de ordenar
Clico na linha 1 com valor 2 na primeira coluna, a linha capturada tem a primeira coluna com valor 1 (novamente). Ou seja, era pra ser exibido o valor 2.

Alguém me ajude?

Obrigado.

4 Respostas

ViniGodoy
//Má prática de programação 1: Variável frame e tabelaVisitas públicas
JTable tblVisitas = controleBoletim.frame.tabelaVisitas;

//Má prática de programação 2: Usar DefaultTableModel
DefaultTableModel modelo = (DefaultTableModel) tblVisitas.getModel();  

//Captura a linha selecionada da tabela
linhaSelecionadaVisitas = tblVisitas.convertRowIndexToModel(tblVisitas.getSelectedRow());
M

Vixi… tá tão ruim assim?

1: É que para cada classe de Gui tenho uma classe de controle correspondente, por isso os componentes da gui são públicos. Isto justifica o meu erro? Acho que não né…

2: Qual usar então?

Obrigado pelas dicas @ViniGodoy

ViniGodoy

Não mesmo. Você deveria ter criado pelo menos um método getter e ter deixado o atributo privado.

Você deveria aprender a fazer seu próprio TableModel (há uma instrução em vermelho gritante na minha assinatura com links que explicam como).
De qualquer forma, a correção de código que postei já deve resolver seu problema imediato.

Usar DefaultTableModel fere o modelo MVC.

M

Hahahhaha

É mesmo Vini Godoy? Que vacilo meu… o foda é que o meu projeto já está gigante, se animar farei os getters e setters para as classes da Gui.

Em relação ao DefaultTableModel, estudarei o conteúdo do link da sua assinatura e implementarei neste meu projeto, ou pelo menos nas Gui’s que estiverem apresentando o defeito especificado neste tópico.

Obrigado. Mas se alguém ainda tiver sugestões para resolução do problema ficarei agradecido de saber…

Criado 21 de abril de 2012
Ultima resposta 21 de abr. de 2012
Respostas 4
Participantes 2