2016-11-17 41 views
0

我正在查看(509_SortHeaderLayer.java)示例作爲參考點。NatTable使用自定義比較器排序

我將一個自定義比較器直接添加到SortedList中,如下例所示。但是,當我單擊調試器中的列時,我的自定義比較器從未到達我在compare()方法的第一行中設置的斷點。

如果我將比較器作爲AbstractRegistryConfiguration添加,它將按預期工作(點擊某列時會達到斷點)。

爲什麼在SortedLists構造函數中設置比較器不能像我期望的那樣工作?一些通用的代碼片段如下所示:

public void setSortComparatorWorks() { 
    SortedList<T> sortedList = new SortedList<>(eventList, null); 
    init(sortedList); 
    getNatTable().addConfiguration(new AbstractRegistryConfiguration() { 

     @Override 
     public void configureRegistry(IConfigRegistry configRegistry) { 
      configRegistry.registerConfigAttribute(SortConfigAttributes. 
       SORT_COMPARATOR, new MyComparator<T>(), 
       DisplayMode.NORMAL); 
     } 
    }); 
    getNatTable().configure(); 
} 

public void setSortComparatorDoesntWork() { 
    SortedList<T> sortedList = new SortedList<>(eventList, 
     new MyComparator<T>); 
    init(sortedList); 
    getNatTable().configure(); 
} 

private void init(SortedList sortedList){ 
    this.bodyDataProvider = new ListDataProvider<>(sortedList, 
     columnPropertyAccessor); 

    this.bodyDataLayer = new DataLayer(this.bodyDataProvider); 

    this.bodyLayerStack = new DefaultBodyLayerStack(new 
     GlazedListsEventLayer<>(this.bodyDataLayer, eventList)); 

    this.columnHeaderLayerStack = new 
     GlazedListsColumnHeaderLayerStack<>(
     columnHeaderDataProvider, sortedList, 
     columnPropertyAccessor, configRegistry, this.bodyLayerStack); 

    this.sortHeaderLayer = new SortHeaderLayer<>(columnHeaderLayerStack, 
     new GlazedListsSortModel<T>(sortedList, 
     columnPropertyAccessor, configRegistry, bodyDataLayer), 
     false); 

    setChildLayer(GridRegion.COLUMN_HEADER, sortHeaderLayer, 0, 0); 
    setChildLayer(GridRegion.BODY, bodyLayerStack, 0, 1); 

    getNatTable().addConfiguration(new SingleClickSortConfiguration()); 
} 

回答

1

您預期的那樣不起作用,因爲內部功能將在SortedList與推導出ConfigRegistry和當前應用的種類的Comparator替換現有Comparator州。

順便說一句,有趣的是,你參考_509_SortHeaderLayerExample而GlazedLists的例子是_602_GlazedListsSortingExample

+0

我有點困惑......如果我在構造函數中添加比較器,並且我沒有向ConfigRegistry添加一個,爲什麼它仍然不起作用?這在上面的setSortComparatorDoesntWork方法的xample中得到了演示。我沒有看到602的例子,我也會檢查。 – ekjcfn3902039

+0

正如我已經說過,它會被派生出來。即使你自己沒有設置,你也可以使用SingleClickSortConfiguration(它是一個DefaultSortConfiguration)來添加一個。 –

相關問題