两个日期之间的 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 table
和 DefaultTableModel 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);}
如何在两个日期之间实现 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 table
和 DefaultTableModel 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);}