我将(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());
}
答案 0 :(得分:1)
它无法正常工作,因为内部函数将替换Comparator
上的任何现有SortedList
,其中Comparator
来自ConfigRegistry
,当前应用的排序状态。
顺便说一句,有趣的是,您引用_509_SortHeaderLayerExample
而GlazedLists的示例是_602_GlazedListsSortingExample
。