无法按日期过滤表格

时间:2019-05-17 15:09:59

标签: java date jtable tablecellrenderer datefilter

我做了一个表编辑器,并且想要一个过滤器,在其中输入“起始”日期和“终止”日期。应该显示所有包含这两个日期之间的日期的行,其他行将被过滤掉。我的第一个问题是如何将日期对象放入表中,而使其看起来不像标准日期对象,所以我这样做了:

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”格式,并且希望能够在两个日期之间进行过滤。

0 个答案:

没有答案