私は参照点として(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にそのコンパレータを追加しないと、なぜそれでも動作しませんか?これは、上のxSampleComparatorDoesntWorkメソッドで実証されています。私は602の例を見ていない、私もそれをチェックします。 – ekjcfn3902039
すでに述べたように、それは導かれるでしょう。また、自分で設定しなくても、DefaultSortConfigurationであるSingleClickSortConfigurationを使用して追加します。 –