É minha primeira postagem, e não faço ideia se a coloquei no local correto.
Estou com um pequeno problema. Tenho uma TableColumn que exibe uma Data formatada para o padrão “dd/MM/yyyy”. Digo formatado, porque no banco ela está salva como LocalDate(“yyyy/MM/dd”).
A função de ordenar a coluna está habilitada e eu já carrego a TableView com uma lista ordenada pela data que vem do banco de dados. Porém quando vou ordenar ela pela coluna, ela usa as Strings no padrão BR e ordena a lista do jeito errado.
Resumindo…
Recebo do banco assim:
2019-01-02
2019-01-15
2019-02-12
É exibido no padrão BR:
02/01/2019
15/01/2019
12/02/2019
E quando reordeno a coluna usa o padrão BR e fica assim:
02/01/2019
12/02/2019
15/01/2019
Há alguma maneira de exibir as no padrão BR e ordenar da maneira correta?
Onde Transacao é a classe que contem a data pela qual comparo e populo.
Ela vai ordenada do jeito certo. Porém, eu exibo os dados no padrão BR( 01/01/2019) usando uma String formatData.
Em aplicações reais normalmente se ordena direto no banco, paginado, pois o volume de informações sempre cresce. Então se o usuário clicou pra ordenar, simplesmente faça um order by no banco. Mas se for um trabalho de escola esquece o que falei.
É um programa que para orçamentos.
Penso que se a ferramenta está para ser usada, deve haver alguma maneira de fazer um funcionar.
Se eu mudar para exibir a data no padrão “yyyy/MM/dd”, tudo funcionar perfeitamente.
O que ta pegando, é que eu não achei a maneira de informar a coluna da tabela para usar a data dos dados e não as String exibidas.
Meus queridos… Consegui resolver da seguinte forma.
Eu já havia tentado via Comparator porém não tinha conseguido.
Mas o exemplo do Eduardo me deu outra ideia enquanto eu respondia ao javaflex.
Acabou que resolvi assim.
Comparator<String> comparator = (o1, o2) -> {
String[] d1 = o1.split("/");
String[] d2 = o2.split("/");
int ano1 = Integer.parseInt(d1[2]);
int mes1 = Integer.parseInt(d1[1]);
int dia1 = Integer.parseInt(d1[0]);
int ano2 = Integer.parseInt(d2[2]);
int mes2 = Integer.parseInt(d2[1]);
int dia2 = Integer.parseInt(d2[0]);
LocalDate data1 = LocalDate.of(ano1, mes1, dia1);
LocalDate data2 = LocalDate.of(ano2, mes2, dia2);
if (data1.isAfter(data2)) {
return 1;
} else if (data1.isBefore(data2)) {
return -1;
} else {
return 0;
}
};
colunaData.setComparator(comparator);
Dividi a String em três campos, criei duas datas locais e fiz a comparação.
Assim tenho a data que vem do banco para trabalhar como quiser e consigo exibir ela no padrão BR.
E quando clico na coluna consigo na ordem crescente e decrescente!