[Resolvido] Ordenar (Ordem alfabética) itens de uma JTable (String)

Olá,

Tenho 1 JTable com 4 colunas. Preciso ordenar em ordem alfabética a 2º coluna. O valor contido nela é String.

Se alguém puder ajudar agradeço.

Obrigado.

Então, não seria melhor vc ordenar um List por exemplo antes de passar para o seu model? Ai ja sairia ordenado sua coluna.

Resolvido. Realmente , implementei a interface comparable na classe da lista que popula a JTable. É só fazer override do método compareTo e chamar o método Collections.sort(ListaDeObjetosDaClasseQueImplementaComparable);

Pra auxiliar alguém que precise, aqui tem um outro exemplo : http://www.guj.com.br/posts/list/20989.java

Obrigado.

Também é possível pedir para a JTable fazer ordenação nas colunas.

Dê também uma olhada no auto-filtro, da minha assinatura. Além de ordenação ela faz filtragem, igual ao filtro do excel.

[quote=ViniGodoy]Também é possível pedir para a JTable fazer ordenação nas colunas.

Dê também uma olhada no auto-filtro, da minha assinatura. Além de ordenação ela faz filtragem, igual ao filtro do excel.[/quote]

Despois do model ja pronto, como que seria pra JTable ordenar as colunas?

Dê um table.setAutoCreateRowSorter(true); e dê uma olhada.

Ela também faz filtragem. Dê uma olhada nesse link, que explica o recurso em detalhes:
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting

Já o auto-filtro funciona como um Decorator do seu model. Ou seja, ele é um model também, que você usa “por cima” do seu model, mais ou menos como vc faz com os InputStreams:

Dê um table.setAutoCreateRowSorter(true); e dê uma olhada.

Ela também faz filtragem. Dê uma olhada nesse link, que explica o recurso em detalhes:
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting

Já o auto-filtro funciona como um Decorator do seu model. Ou seja, ele é um model também, que você usa “por cima” do seu model, mais ou menos como vc faz com os InputStreams:

Hum, bom de mais! Vlw Vini!

Interessante. Mais pro meu caso não tenho necessidade de alto filtro. Este método simples ja foi a solução.
Então fica registrado varias formas de se resolver.

Obrigado.

ViniGodoy,

Primeiramente, parabéns pelo projeto. Ficou muito bom.

Precisei fazer uma pequena adaptação para atender à minha necessidade. Se possível, peço a gentileza de analisar possíveis impactos.

A mudança foi feita no método com.towel.swing.table.TableFilter.processFilter()

removi do corpo deste método o trecho if (!isFiltering()) return;

Motivo?

É que quando eu clicava em alguma opção do filtro depois escolhia “(All)” o método filter.getFilteredRows().size() sempre retorna zero, quando na verdade, deveria retornar a quantidade de linhas da table.

Se eu estiver errado, ou se isso implica em algum impacto, por favor, sinalize.

abraços.

Talvez seja melhor testar essa condição específica no getFilteredRows(), e faze-lo retornar todas as linhas caso não esteja sendo filtrado.

É que isso garante uma melhor performance no filtro.