Quando ordeno a JTable por coluna a minha dtm não fica ordenada. [RESOLVIDO]

5 respostas
G

Saudações companheiros,

Desenhei uma JTable com várias colunas no meu JFrame. Quando no evento de click tento imprimir na tela o valor contido na célula clicada tudo ocorre bem, até que, depois de clicar no título de qualquer coluna para realizar a ordenação dos dados conforme os valores contidos na respectiva coluna e por conseguinte em um segundo evento de click ocorre o problema. E o problema é que continua imprimindo o mesmo valor da ordenação anterior, isto é, a JTable mostra os dados reordenados enquanto que, a dtm (DefaultTableModel) desta JTable continua com a mesma ordenação em que foi instânciada da 1ª vez.

Por exemplo:

Então, depois disso quando clicamos em uma linha, sei exatamente qual é o index na listCliente e por isso ao fazer:

Irá pegar o cliente corretamente. No entanto, quando clico no título de uma coluna qualquer, causando assim a reordenação dos dados, o último código acima não funciona porque a ordenação na JTable e na listCliente (ArrayList) não batem.

Usei NetBeans 6.9 com jdk 6 versão update nº 22.

5 Respostas

G

Ah, acho que pensei em uma forma de fazer isso dar certo! Existe um método getValueAt() que posso usar para pesquisar na listCliente, só não tenho certeza se é a melhor forma disso ser feito.

G

Só para finalizar, o que me assusta é que a dtm não muda sua ordenação dos dados.

Nos eventos de mouseclicked colequei este código:

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();

        for (int i = 0; i < dtm.getRowCount() - 1; i++) {

            System.out.println(i+ " > getValueAt: "+ dtm.getValueAt(i, 0));

        }

E após incessantes reordenações da jtable, a dtm permaneceu imutável.

PS.: karaka, agora que aprendi a usar a tag de CODE, putz!

ViniGodoy

Por essas e outras insistimos:
[size=18][color=darkred]Não use DefaultTableModel[/color][/size]

Além disso, o JTable tem método pra converter o índice exibido na view, com o índice que está dentro do model.
Como vc vai perceber no futuro, não mudar a ordem do model é uma enorme vantagem.

Isso não vale só para as linhas: os índices das colunas também não mudam, mesmo que o usuário troque colunas de lugar.

E é mais um exemplo do porque a separação entre view e model é tão importante.

ViniGodoy

int viewIndex = jTable1.getSelectedRow(); //índice do que está sendo exibido na tabela int modelIndex = jTable1.convertRowIndexToModel(viewIndex); //Índice do conteúdo dentro do model Cliente c = listCliente.get(modelIndex);

Por essas e outras, é bom ler o javadoc. E também os Tutoriais, e não programar por tentativa e erro.

E claro, [color=red]não usar o DefaultTableModel.[/color]

G

Opa valeu!

Criado 4 de dezembro de 2010
Ultima resposta 5 de dez. de 2010
Respostas 5
Participantes 2