2015-07-12 48 views
1

如何在两个日期之间实现RowFilter?日期是字符串格式。是否有必要将格式更改为日期格式以应用RegexFilter两个日期之间的JTable rowfilter,同一列

我尝试使用以下,但没有成功

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));只是用于搜索一个字符串,但作为新手我将非常感谢任何建议。

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

+0

数据存储为Date对象还是存储为String? – MadProgrammer

+0

日期存储为字符串 – mustangDC

+1

如果将它们存储为Date,则会更容易,因为您可以轻松比较日期,[示例](http://stackoverflow.com/questions/22495525/java-comparing-strings- which-are-numbers/22495727#22495727)比较基于字符串的日期。您需要定义您的Owen RowFilter,它会记录开始日期和结束日期,然后比较每一行以查看它是否在指定的范围之间。 [RowFilter示例](http://stackoverflow.com/questions/20958513/java-swing-toggle-button-to-filter-jtable-rows/20959348#20959348) – MadProgrammer

回答

3

你应该存储在TableModel不是Date日期的字符串表示形式。您可以使用RowFilter

除了使用正则表达式过滤器,还可以使用带两个日期过滤器的“和”过滤器。 喜欢的东西:

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更多信息,以及如何使用过滤器的工作的例子。

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