Не удается отфильтровать таблицу по дате - PullRequest
0 голосов
/ 17 мая 2019

Я сделал редактор таблиц и хотел создать фильтр, в который я вводил бы дату «от» и дату «до». Должны отображаться все строки, содержащие дату между этими двумя датами, остальные отфильтрованы. Моя первая проблема заключалась в том, как поместить объект даты в таблицу, не похожий на стандартный объект даты, поэтому я сделал это:

TableCellRenderer tableCellRenderer = new DefaultTableCellRenderer() {
    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yy");
    public Component getTableCellRendererComponent(JTable table, Object 
            newDatum, boolean isSelected,boolean hasFocus, int row, int column) {
        if (newDatum instanceof Date) {
            newDatum = format.format(newDatum);
        }
        return super.getTableCellRendererComponent(table, newDatum, isSelected, 
                hasFocus, row, column);
    }
};
table.getColumnModel().getColumn(0).setCellRenderer(tableCellRenderer);

Но я не думаю, что объект даты остается объектом даты таким образом, но я не уверен. Следующая проблема заключается в том, что, хотя приведенный выше код на самом деле форматирует объект даты в формате «dd.MM.yy», чего я и хотел, когда я нажимаю на ячейку, он немедленно возвращается к стандартному формату даты. Кроме того, метод фильтра, который я сделал, я не уверен, работает ли он так:

public void filterDates(Date von, Date bis) {
    List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(2);
    filters.add(RowFilter.dateFilter(ComparisonType.AFTER, von));
    filters.add(RowFilter.dateFilter(ComparisonType.BEFORE, bis));
    TableRowSorter<DefaultTableModel> tr2 = new TableRowSorter<DefaultTableModel>(
            (DefaultTableModel) table.getModel());
    table.setRowSorter(tr2);
    tr2.setRowFilter(RowFilter.orFilter(filters));
}

Я не знаю, будет ли он делать то, что я хочу, отфильтровать даты между двумя указанными датами.

Теперь я не знаю, использую ли я метод getTableCellRendererComponent, который использует tablecellrender, если он сохраняет объект даты, если он делает, все хорошо. Но мне также нужен способ сохранить их в желаемом формате, даже если я нажму на редактировать ячейку. У меня есть tablechangeListener, но я не знаю, что мне делать. Прямо сейчас, если я позволю объектам даты оставаться в нужном желаемом формате и использую фильтр, все строки исчезнут, если я их отредактирую, так что они будут выглядеть как исходный формат даты, и при попытке фильтрации они тоже исчезнут. Даже если даты находятся между двумя введенными мною датами.

Что должно случиться, так это то, что объекты даты остаются в формате "dd.MM.yy", даже если я нажимаю на правку, и я хочу иметь возможность фильтровать их между двумя датами.

...