如何在两个日期之间实施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是模型,我是一个整数值,与我的标准不符
答案 0 :(得分:3)
您应该在Date
中存储TableModel
而不是日期的字符串表示。
然后你可以使用RowFilter
。
您可以使用&#34;和&#34;而不是正则表达式过滤器。过滤两个日期过滤器。 类似的东西:
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教程,了解有关如何使用过滤器的更多信息和工作示例。
答案 1 :(得分:1)
您应该有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);}