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