使用自定义比较器进行NatTable排序

时间:2016-11-17 15:17:50

标签: java nattable

我将(509_SortHeaderLayer.java)示例视为参考点。

我将自定义比较器直接添加到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 个答案:

答案 0 :(得分:1)

它无法正常工作,因为内部函数将替换Comparator上的任何现有SortedList,其中Comparator来自ConfigRegistry,当前应用的排序状态。

顺便说一句,有趣的是,您引用_509_SortHeaderLayerExample而GlazedLists的示例是_602_GlazedListsSortingExample