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.
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.
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.
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]