0

我正在查看 (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());
}
4

1 回答 1

1

它不像您期望的那样工作,因为内部函数将替换任何现有ComparatorSortedListaComparator派生ConfigRegistry自当前应用的排序状态。

顺便说一句,有趣的是,_509_SortHeaderLayerExample当 GlazedLists 的示例是_602_GlazedListsSortingExample.

于 2016-11-17T15:58:16.757 回答