2016-11-17 2 views
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()); 
} 

答えて

1

あなたが期待するように、内部関数はConfigRegistryと、現在適用されたソートの外に導出されComparatorSortedList上の既存Comparatorを交換しますので、それは動作しません。状態。

ところで、興味があるのは_509_SortHeaderLayerExampleですが、GlazedListsの例は_602_GlazedListsSortingExampleです。

+0

私はちょっと混乱しています...コンストラクタにコンパレータを追加しても、ConfigRegistryにそのコンパレータを追加しないと、なぜそれでも動作しませんか?これは、上のxSampleComparatorDoesntWorkメソッドで実証されています。私は602の例を見ていない、私もそれをチェックします。 – ekjcfn3902039

+0

すでに述べたように、それは導かれるでしょう。また、自分で設定しなくても、DefaultSortConfigurationであるSingleClickSortConfigurationを使用して追加します。 –

関連する問題