两个日期之间的 JTable rowfilter,同一列

JTable rowfilter between two dates, same column

如何在两个日期之间实现 RowFilter?日期为字符串格式。是否需要将格式更改为日期格式才能应用 RegexFilter?

我尝试使用以下方法,但失败了:

DefaultTableModel model = (DefaultTableModel) easypath.masteBusiness_table.getModel();
easypath.masteBusiness_table.setModel(model);
TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(easypath.masteBusiness_table.getModel());
easypath.masteBusiness_table.setRowSorter(rowSorter);
rowSorter.setRowFilter(RowFilter.regexFilter(startD+"\s+(.*?)\s+"+endD));

我知道我的过滤有误,因为 (startD+"\s+(.*?)\s+"+endD)); 仅用于搜索单个字符串,但作为新手,我非常感谢任何建议。

更新
我刚刚看到这个 (http://docs.oracle.com/javase/7/docs/api/javax/swing/RowFilter.html) 其中 RowSorter<M,I>,M 是模型,I 是一个整数值,这不符合我的标准

您应该在 TableModel 中存储 Date 而不是日期的字符串表示形式。

那你可以用一个RowFilter

您可以使用带有两个日期过滤器的 "and" 过滤器来代替正则表达式过滤器。 类似于:

List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
filters.add( RowFilter.dateFilter(ComparisonType.AFTER, startDate) );
filters.add( RowFilter.dateFilter(ComparisonType.BEFORE, endDate) );
rf = RowFilter.andFilter(filters);
sorter.setRowFilter(rf);

阅读 Sorting and Filtering 上的 Swing 教程,了解有关如何使用过滤器的更多信息和工作示例。

您应该有属性 JTable tableDefaultTableModel dtm。然后在按日期范围过滤的函数中。

public void filter(Date startDate, Date endDate){
    List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
    filters.add( RowFilter.dateFilter(ComparisonType.AFTER, startDate) );
    filters.add( RowFilter.dateFilter(ComparisonType.BEFORE, endDate) );
    dtm = (DefaultTableModel) table.getModel();
    TableRowSorter<DefaultTableModel> tr = new TableRowSorter<>(dtm);
    table.setRowSorter(tr);
    RowFilter<Object, Object> rf = RowFilter.andFilter(filters);
    tr.setRowFilter(rf);}