簡體   English   中英

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));進行過濾是錯誤的(startD+"\\\\s+(.*?)\\\\s+"+endD)); 僅用於搜索單個字符串,但是作為新手,我非常感謝任何建議。

更新
我剛剛看到了這個( http://docs.oracle.com/javase/7/docs/api/javax/swing/RowFilter.html ),其中RowSorter<M,I> ,M是模型,而I是整數,不符合我的標准

您應該在TableModel存儲Date而不是Date的String表示形式。

然后,您可以使用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);

閱讀有關排序和過濾的Swing教程,以獲取更多信息以及有關如何使用過濾器的工作示例。

您應該有一個屬性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);}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM