ordenação (de números!) em uma jtable

oi pessoal
eu criei uma jtable, fiz ela usar o método autocreaterowsorter, mas quando coloco pra ordenar os números, fica tudo estranho:
{1, 12, 152, 2, 25, 3}…
tentei mudar o elemento da coluna de string pra integer, mas não adiantou, continua assim…
como faço pra ordenar como números, tipo:
{1, 2, 3, 12, 25, 152}…?
acho que está ordenando por ordem alfabética mesmo né… =/
obrigado!

Esses números da JTable são Id de alguma tabela no banco de dados? Se teus dados vem a partir de uma consulta eles já vem ordenados por padrão.

Eu sei… Eles já saem ordenados por padrão.
Mas suponha uma tabela com 2 colunas, uma com números e outra com palavras associadas.
Eu ordeno a saída por números, mas permito que o usuário clique na header da coluna das palavras para ordená-las alfabéticamente. Nesse caso, se ele decidir voltar para a ordenação dos números, cairia nesse problema que eu estou tendo.
Outro caso é em uma saída com 2 colunas de números e outra de texto. Posso ordenar a saída por um dos números, mas se o usuário quiser ordenar pelo outro, fica estranho novamente.

Não é uma solução apropriada mas resolve.
Faz um select no banco para retornar na ordem da coluna clicada

Entendi :slight_smile:
Bom, acho que o sorter só ordena alfabeticamente mesmo. Nunca fiz algo usando isso então nao sei te dizer como resolver ^^ vou dar uma procurada a respeito qualquer novidade posto aqui

Não sei se te entendi kapa01, o que você está sugerindo é manter uma lista pré-ordenada em memória e quando o usuário clicar no header, carregá-la?
É, pode ser uma solução…

http://java.sun.com/javase/6/docs/api/javax/swing/table/TableRowSorter.html

http://java.sun.com/docs/books/tutorial/uiswing/examples/components/TableSortDemoProject/src/components/TableSortDemo.java

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Vê se te ajuda

hm… usando TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()); table.setRowSorter(sorter);eComparator<String> comparator = new Comparator<String>() { public int compare(String s1, String s2) { //vou fazer ainda } public int compare(int i1, int i2) { if (i1<i2) return i1; else return i2; } };consegui ordenar do jeito que eu queria uma tabela com os números já prontos, mas depois que eu aplico nela o programa em si, ela volta a ordenar do jeito errado… eu devo estar fazendo alguma coisa com o tablemodel, ou sei lá…
preciso pensar mais nisso (amanhã)… =)
mas a solução é essa mesmo, obrigado

Eu criei uma tabelinha simples pra testar, e nela funcionou… Mas quando vou aplicar na tabela de saída do meu programa, não funciona, volta a ordenar do jeito que eu não quero, alfabeticamente…
Ontem eu imaginei que fosse porque eu estava usando esse código acima logo depois de criar a tabela, e como eu mexo no tablemodel pra preenchê-la com os dados, achei que isso influenciava… Mas hoje tentei ligar essa parte de código depois de imprimir os resultados, e mesmo assim não funcionou… =/
Alguém tem alguma ideia do que pode estar acontecendo?
Obrigado

Não era o que eu imaginava… porque mesmo se eu mexer no tablemodel da tabelinha menor (a que eu fiz para testar), ela continua ordenando certo… Deve ter alguma coisa diferente nas propriedades de cada tabela… Alguém faz alguma ideia do que pode ser?

Gostaria de saber Luisera se vc conseguiu implementar seu código e consequentemente um bom resultado clicando na coluna de código
e ordenar tudo perfeitamente ?

Att. Prog.Rennan

O problema do colega é que os dados dele eram Strings. Por isso a ordenação considerava os números como se fossem letras, e ordenava como eles apareceriam no dicionário. A solução seria implementar o RowSorter e fazer a conversão para inteiro no compareTo.

Ou então, melhor ainda, alterar o TableModel para lidar com inteiros naquela coluna.