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

内部関数は、現在適用されている並べ替え状態から派生した に既存Comparatorのものを置き換えるため、期待どおりには機能しません。SortedListComparatorConfigRegistry

ところで、興味深い_509_SortHeaderLayerExampleのは、GlazedLists の例が_602_GlazedListsSortingExample.

于 2016-11-17T15:58:16.757 に答える