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());
}
我有點困惑......如果我在構造函數中添加比較器,並且我沒有向ConfigRegistry添加一個,爲什麼它仍然不起作用?這在上面的setSortComparatorDoesntWork方法的xample中得到了演示。我沒有看到602的例子,我也會檢查。 – ekjcfn3902039
正如我已經說過,它會被派生出來。即使你自己沒有設置,你也可以使用SingleClickSortConfiguration(它是一個DefaultSortConfiguration)來添加一個。 –