2014-06-14 63 views
2

我盡我所能去查看RowFilter的所有文檔和javadoc。我正在使用對象的數組列表,併爲我的JTable提供了AbstractTableModel。我想過濾JTable以僅在特定日期之後顯示對象的日期屬性。使用RowFilter和ArrayList

是否將AbstractTableModel用作包含方法的參數?這是文檔中的例子。

RowFilter<PersonModel,Integer> ageFilter = new RowFilter<PersonModel,Integer>() { 
    public boolean include(Entry<? extends PersonModel, ? extends Integer> entry) { 
    PersonModel personModel = entry.getModel(); 
    Person person = personModel.getPerson(entry.getIdentifier()); 
    if (person.getAge() > 20) { 
     // Returning true indicates this row should be shown. 
     return true; 
    } 
     // Age is <= 20, don't show it. 
     return false; 
    } 
}; 

是否有可能得到這種解釋包括方法和適應我的情況的某種方式。我瞭解如何比較日期,但該方法如何訪問我的JTable中的行和對象?

回答

2

好吧,這真的很簡單......一旦你做到了幾次;)

RowFilter<PersonModel, Integer> ageFilter = new RowFilter<PersonModel, Integer>() { 

顯然定義了RowFilter,基本上,它定義了「行模式」的約束(PersonModel)和引用每行(Integer

基本上的方法,它說,「我有一個TableModel,其可通過Integer值來訪問」 ......

public boolean include(Entry<? extends PersonModel, ? extends Integer> entry) { 

是對僅abstract方法需要被執行;)

獲取從entry

Person person = personModel.getPerson(entry.getIdentifier()); 

基本上模型,這會從使用行指數模型中的Person作爲指定通過entry.getIdentifier()

if (person.getAge() > 20) { 
    // Returning true indicates this row should be shown. 
    return true; 
} 
// Age is <= 20, don't show it. 
return false; 

好吧,這是非常基本的;)...

現在,沒有任何更多的信息,去了解你的具體實現,這是你的「可能」能夠做什麼很基本的例子...

要使生活更輕鬆,我只是把它包起來都在一個簡單的class,基本上,在需要的時候,你會創建一個新的實例,傳遞Date值,然後用它設置表的RowSorter過濾器...

public class DateRowFilter exetends RowFilter<TableModel, Integer>() { 
    private Date date; 

    public DateRowFilter(Date date) { 
     this.date = date; 
    } 

    public Date getDate() { 
     return date; 
    } 

    public boolean include(Entry<? extends TableModel, ? extends Integer> entry) { 
     boolean include = false; 
     TableModel model = entry.getModel(); 
     int row = entry.getIdentifier(); 
     for (int col = 0; col < model.getColumnCount(); col++) { 
      Object value = model.getValueAt(row, col); 
      // Make decisions here 
      // You'll probably want to use Date#isBefore or Date#isAfter 
      // depending on which side you are comparing 
     } 
     return false; 
    } 
} 
+2

檢查使用RowFilter.dateFilter謂詞的相關示例[here](http://stackoverflow.com/q/17854854/230513)。 – trashgod

+1

@trashgod停止使這個人的生活變得輕鬆;) – MadProgrammer

+0

我可以在任何地方找到RowFilter的工作方式,這是唯一的一半體面的解釋。沒有一個更好的Swing APIs ...... – awmross