2016-11-29 75 views
0

我想同時將兩種不同類型的篩選應用於NatTable。每個過濾器都能正常工作,但它們在組合時並不像我預期的那樣工作。NatTable篩選

  • 我做的第一件事情是給FilterList.setMatcher()的調用,以減少行根據外部標準的數量
  • 接下來我要做的事情就是用FilterRowHeaderComposite申請進一步的過濾,但它似乎忽略輸入(即使我看到在過濾器標題單元格輸入/圖標),並沒有應用過濾器

下面是一些基本的代碼片段,顯示我有什麼設置...

public void basicSetup() { 
    eventList = GlazedLists.eventList(values); 
    TransformedList<T, T> rowObjectsGlazedList = GlazedLists. 
     threadSafeList(eventList); 
    sortedList = new SortedList<>(rowObjectsGlazedList, myComparator<>()); 
    filterList = new FilterList<>(sortedList); 

    //... code ommitted 

    FilterRowHeaderComposite<T> filterRowHeaderLayer = new 
     FilterRowHeaderComposite<>(
      new DefaultGlazedListsFilterStrategy<T>(bodyLayerStack. 
       getFilterList(), columnPropertyAccessor, configRegistry), 
      sortHeaderLayer, columnHeaderDataLayer.getDataProvider(), 
      configRegistry); 

} 

public void applyExternalFilter() { 
    getBodyLayerStack().getFilterList().setMatcher(myCriteria); 
} 

public void resetExternalFilter() { 
    getBodyLayerStack().getFilterList().setMatcher(null); 
} 

任何幫助,將不勝感激。謝謝!

回答

1

您正試圖通過濾鏡行將編程應用濾鏡與用戶應用濾鏡混合。由於篩選器行處理FilterList上的匹配器,因此無法確定哪些篩選器是由誰添加的。

要支持將靜態過濾器與用戶定義的過濾器混合在一起,您需要使用支持添加其他靜態過濾器的DefaultGlazedListsStaticFilterStrategy

一個例子是在NatTable實施例的應用可用 - >實例教程 - > GlazedLists - >過濾器 - > GlazedListsStaticFilterExample(_6033_GlazedListsStaticFilterExample.java)

DefaultGlazedListsStaticFilterStrategy filterStrategy = new DefaultGlazedListsStaticFilterStrategy(
        bodyLayerStack.getFilterList(), 
        columnPropertyAccessor, 
        configRegistry); 

FilterRowHeaderComposite filterRowHeaderLayer = 
     new FilterRowHeaderComposite(
       filterStrategy, 
       columnHeaderLayer, 
       columnHeaderDataLayer.getDataProvider(), 
       configRegistry); 

靜態濾波器可接着經由

施加
filterStrategy#addStaticFilter(Matcher); 

目前沒有明確的方法可用。只能刪除以前應用的過濾器。但隨時可以創建一個清除增強票並提供補丁。