2013-05-15 30 views
0

我正在使用GlazedList處理使用MVC模式實現的Swing項目中的JTables。我的控制器中有以下代碼,用於在表中合併篩選功能。GlazedList - 僅基於1列的篩選器表

final JTextField txtFilter = view.getTxtSearch(); 
    FilterList<E> textFilteredSource = new FilterList<E>(model.getDataTableSource(), new TextComponentMatcherEditor<E>(txtFilter, new TextFilterator<E>() { 
     public void getFilterStrings(List baseList, E element) { 
      Person p = (Person) element; 
      baseList.add(p.getFirstName()); 
      baseList.add(p.getLastName()); 
      baseList.add(p.getBirthDay()); 
      baseList.add(p.getAge()); 
      baseList.add(p.getOccupation()); 
     } 
    })); 

model.setDataTableSource(textFilteredSource); 

上面的代碼允許我的表根據整個表中存在的所有數據進行過濾。我想要的是一個功能,只能根據一列對錶格進行過濾。有人知道如何做到這一點?

回答

0

對於那些遇到同樣問題的人,我通過實驗自己解決了這個問題,並且我發現baseList實際上是一個字符串列表,其中FilterList將執行其篩選作業。爲了滿足我的要求,我只是將需要過濾的列值添加到baseList參數中。

以下代碼將根據來自視圖的組合框選定索引來篩選表。

public void getFilterStrings(List baseList, E element) { 
     JComboBox cbo = view.getCboSearch(); 
     int selIndex = cbo.getSelectedIndex(); 
     Person p = (Person) element; 

     if(selIndex == 0) 
      baseList.add(p.getFirstName()); 
     else if(selIndex == 1) 
      baseList.add(p.getLastName()); 
     else if(selIndex == 2) 
      baseList.add(p.getBirthDay()); 
     else if(selIndex == 3) 
      baseList.add(p.getAge()); 
     else if(selIndex == 4) 
      baseList.add(p.getOccupation()); 
    }