[Resolvido] Pegar dados ordenados JTable para JRTableModelDataSource

Boa noite pessoal!

Tenho uma aplicação para desktop em que utilizo o JasperReports 4.1.3 para gerar relatórios. O relarório funciona perfeitamente. Ele é alimentado por um JRTableModelDataSource, que recebe um TableModel como fonte de dados.

O problema é o seguinte: meu JTable permite ordenação, porém quando utilizo o método meuTable.getModel() os dados não estão ordenados. E preciso gerar um relatório com os dados da forma com o que o usuário ordenou na tabela. Atualmente está sempre gerando na ordem que os itens são adicionados, independente da ordenação (utilizo o ObjectTableModel do framework Towel).

Eu entendo que os dados exibidos para o usuário realmente não ficam com os mesmos índices do TableModel (até existe o método convertRowIndexToModel() para esta situação), mas queria saber se alguém sabe forçar esta atualização, ou seja: o usuário ordenou a tabela pela coluna X, no TableModel também deve estar ordenado pela coluna X ! :slight_smile:

Já tentei da seguinte maneira, antes de gerar o relatório, porém sem sucesso:

for (int i = 0; i < meuTable.getRowCount(); i++)
 {
       meuTable.convertRowIndexToModel(i);
}

Se alguém tiver alguma idéia, ou tiver passado por alguma situação parecida, agradeço a ajuda!

Obrigado!

Alguém tem alguma idéia??

Alguém?

Boa noite pessoal.

Consegui resolver, não sei se é da melhor forma, mas gostaria de deixar a solução com vocês:

No meu caso, gostaria de ordenar especificamente pelo atributo “Categoria” dos meus objetos Item, então criei um comparador para isso:

    Comparator<Item> comparador = new Comparator<Item>()
    {
        @Override
        public int compare(Item t, Item t1)
        {
            return Collator.getInstance().compare(t.getCategoria(), t1.getCategoria());
        }
    };

Depois bastava chamar assim que estava tudo ordenado:

//Criei um List listaItens com o método getData() do ObjectTableModel (Mão na roda pq o DefaultTableModel não tem!!!), depois chamei a ordenação e devolvi a lista pro TableModel.

listaItens = modeloSimulacao.getData();
Collections.sort(listaItens, comparador);
modeloSimulacao.setData(listaItens);

Depois de ordenado passei novamente pro JRTableModelDataSource do JasperReports e funcionou! :slight_smile:

Se alguém tiver alguma solução melhor, agradeço!

Até!