【问题标题】:JTable rowfilter between two dates, same column两个日期之间的JTable行过滤器,同一列
【发布时间】:2015-07-12 21:01:45
【问题描述】:

如何在两个日期之间实现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&lt;M,I&gt;,M 是模型,I 是整数值,不符合我的标准

【问题讨论】:

  • 数据是存储为日期对象还是字符串?
  • 日期存储为字符串
  • 如果将它们存储为日期会更容易,因为您可以轻松比较日期,example 比较基于字符串的日期。您需要定义您的 Owen RowFilter,它获取开始日期和结束日期,然后比较每一行以查看它是否在指定的范围之间。 RowFilter example
  • 会尽力让你知道...

标签: java string swing jtable rowfilter


【解决方案1】:

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

然后您可以使用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 教程,了解有关如何使用过滤器的更多信息和工作示例。

【讨论】:

    【解决方案2】:

    您应该拥有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);}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多