Alguém aí já fez um filtro por data numa JTable?
Eu consegui fazer, usando o RowFilter.dateFilter, mas ele não tem opção de maior ou igual e menor ou igual, então não atende perfeitamente ao que espero. É inviável ter sempre que digitar uma data com um dia antes e um dia depois pra filtrar corretamente…
Eu tentei usar GlazedLists e consegui fazer a filtragem, mas ele é extremamente lento pra filtrar campos com String, por causa do contains(), então descartei (pelo menos até conseguir achar uma solução).
RESOLVIDO
Pra quem precisar, segue a solução:
Set<RowFilter<Object, Object>> filtrosTabela = new HashSet<>();
if (pegarDataInicialPesquisa() != null) {
data = formatador.format(pegarDataInicialPesquisa());
Set<RowFilter<Object, Object>> datas = new HashSet<>();
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.AFTER,
formatador.parse(data), LancamentosTableModel.COL_DATA));
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.EQUAL,
formatador.parse(data), LancamentosTableModel.COL_DATA));
filtrosTabela.add(RowFilter.orFilter(datas));
}
if (pegarDataFinalPesquisa() != null) {
data = formatador.format(pegarDataFinalPesquisa());
Set<RowFilter<Object, Object>> datas = new HashSet<>();
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.BEFORE,
formatador.parse(data), LancamentosTableModel.COL_DATA));
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.EQUAL,
formatador.parse(data), LancamentosTableModel.COL_DATA));
filtrosTabela.add(RowFilter.orFilter(datas));
}
// outros filtros.....
sorter.setRowFilter(RowFilter.andFilter(filtrosTabela));
É claro!
Você me deu uma grande ajuda, irmão.
Impressionante como as vezes a gente não consegue ver algo simples porque tá acostumado com uma forma de fazer as coisas.
Pra quem precisar, implementei assim:
Set<RowFilter<Object, Object>> filtrosTabela = new HashSet<>();
if (pegarDataInicialPesquisa() != null) {
data = formatador.format(pegarDataInicialPesquisa());
Set<RowFilter<Object, Object>> datas = new HashSet<>();
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.AFTER,
formatador.parse(data), LancamentosTableModel.COL_DATA));
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.EQUAL,
formatador.parse(data), LancamentosTableModel.COL_DATA));
filtrosTabela.add(RowFilter.orFilter(datas));
}
if (pegarDataFinalPesquisa() != null) {
data = formatador.format(pegarDataFinalPesquisa());
Set<RowFilter<Object, Object>> datas = new HashSet<>();
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.BEFORE,
formatador.parse(data), LancamentosTableModel.COL_DATA));
datas.add(RowFilter.dateFilter(RowFilter.ComparisonType.EQUAL,
formatador.parse(data), LancamentosTableModel.COL_DATA));
filtrosTabela.add(RowFilter.orFilter(datas));
}
// outros filtros.....
sorter.setRowFilter(RowFilter.andFilter(filtrosTabela));