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

时间:2015-07-12 21:01:46

标签: java string swing jtable rowfilter

如何在两个日期之间实施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是模型,我是一个整数值,与我的标准不符

2 个答案:

答案 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 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);}