JTable autoCreateRowSorter

2 respostas
josimarsis

Olá pessoal estou desenvolvendo uma aplicação e todas minhas telas tem uma JTable de consulta,
onde o usuário clica em uma linha da tabela e o sistema seta os valores nos campos para alteração ou deleção
Todos meus métodos de consulta retornam um List de objetos e atravez do índice da tabela eu pego o objeto certo na lista pra setar nos campos.
Surgiu a necessidade de oferecer uma maneira de o usuário classificar os dados da consulta de acordo com o cabeçalho da JTable pra isso estou utilizando o autoCreateRowSorter das propriedades do Netbeans. Mas quando faço isso não consigo mais pegar o indece certo na lista.
Alguém tem alguma dica ?

Grato

2 Respostas

M

Estou com o mesmo problema, porem como este recurso não é muito importante no meu aplicativo, deixei desativado.
Em uma das colunas tipo DATE, fiz a ordenação por querysql, usando o recurso SQL de order by nomeColuna desc, com isso a ultima data fica sempre em cima.
Talvez um recurso como este possa resolver o seu problema, mas terá que ser sempre uma querysql diferente ao clicar na JTable.
É só uma ideia, pois ainda não estou usando este recurso em todas as colunas, somente em uma , quando eu terminar se ainda estiver com o mesmo problema posto o resultado.

Espero ter ajudado em alguma coisa.

renato.marquez

Presumo que você está usando um TableModel particular para renderizar seus objetos na JTable, certo?

Bem, de uma forma resumida, quando você habilita a criação de um RowSorter automaticamente, a JTable irá instanciar um TableRowSorter. Quando o usuário clicar sobre alguma coluna, a instância de TableRowSorter irá redesenhar os dados da sua tabela, criando as linhas conforme o critério de ordenação da coluna clicada, ok? Consequentemente, quando você for fazer isso (por exemplo):

int indice = suaJTable.getSelectedRow(); Object seuObjeto = suaLista.get(indice);O resultado não será o que você espera, pois o índice da linha selecionada não será equivalente ao índice na sua lista.
Você pode tentar resolver o problema dessa forma:

RowSorter rowSorter = suaJTable.getRowSorter(); int indiceView = suaJTable.getSelectedRow(); int indiceModel = rowSorter.convertRowIndexToModel(indiceView); Object seuObjeto = suaLista.get(indiceModel);Se isso não resolver, você pode ler um pouco mais sobre a classe RowSorter para compreender os métodos que ela oferece.
Se quiser, publique a parte do seu código-fonte que faz isso que você comentou aqui neste tópico para que o pessoal possa dar mais sugestões.

Espero ter ajudado de alguma forma!

Criado 4 de outubro de 2008
Ultima resposta 4 de set. de 2012
Respostas 2
Participantes 3