2016-11-23 3 views
0

У меня есть nattable с возможностью сортировки/фильтров на основе офф http://www.eclipse.org/nattable/documentation.php?page=sorting и пример 6031_GlazedListsFilterExample.javaNatTable - Странное поведение при сортировке

Изначально моя таблица имеет нулевые строки.

Сценарий 1:

  • Я просмотреть CTabItem, который содержит NatTable без каких-либо строк.
  • Если я затем заполняю строки и нажимаю на заголовки столбцов, ничего не происходит (сортировка кажется отключенной).

Сценарий 2:

  • Я НЕ просмотреть CTabItem, содержащий NatTable без каких-либо строк.
  • Затем я заполняю строки
  • Затем я просматриваю CTabItem, содержащий NatTable, который теперь имеет строки.
  • я нажимаю на заголовки столбцов и все, рода, как и ожидалось (сортировка кажется включен)

Сценарий 3:

  • Я НЕ просмотреть CTabItem, содержащий NatTable без каких-либо строк.
  • Затем я заполняю строки
  • Затем я просматриваю CTabItem, содержащий NatTable, который теперь имеет строки.
  • Затем я удаляю все данные строки
  • Я нажимаю на заголовки столбцов и все виды, как ожидалось (сортировка кажется включенной). * хотя строк нет, я все еще вижу, что в ячейке заголовка столбца появляются значки вверх/вниз

Есть ли причина, по которой действия заголовка столбца не «обновлены» после первоначального «представления» NatTable ? Другими словами, кажется, что учет оставшихся таблиц сохраняется после того, как впервые просматривается NatTable, независимо от того, изменяются ли строки.

Соответствующих разделы кода показаны ниже:

private CompositeLayer createExampleLayer(Collection<T> values, 
    IColumnPropertyAccessor<T> columnPropertyAccessor, 
    IDataProvider columnHeaderDataProvider, IConfigRegistry 
    configRegistry, Matcher<T> matcher) { 
    BodyLayerStack<T> bodyLayerStack = new BodyLayerStack<>(
     values, columnPropertyAccessor); 

    // build the column header layer 
    DataLayer columnHeaderDataLayer = new 
     DefaultColumnHeaderDataLayer(columnHeaderDataProvider); 
    ILayer columnHeaderLayer = new 
     ColumnHeaderLayer(columnHeaderDataLayer, bodyLayerStack, 
     bodyLayerStack.getSelectionLayer()); 

    SortHeaderLayer<T> sortHeaderLayer = new SortHeaderLayer<> 
     (columnHeaderLayer, new GlazedListsSortModel<T> 
     (bodyLayerStack.getSortedList(), columnPropertyAccessor, 
     configRegistry,      
     bodyLayerStack.getBodyDataLayer()), false); 

    FilterRowHeaderComposite<T> filterRowHeaderLayer = new 
     FilterRowHeaderComposite<>(
     new DefaultGlazedListsFilterStrategy<T> 
     (bodyLayerStack.getFilterList(), columnPropertyAccessor, 
     configRegistry), 
     sortHeaderLayer, columnHeaderDataLayer.getDataProvider(), 
     configRegistry); 

    // Omitted code for rowHeaderLayer and cornerLayer 
    return new GridLayer(bodyLayerStack, filterRowHeaderLayer, 
    rowHeaderLayer, cornerLayer); 
} 

public BodyLayerStack(Collection<T> values, 
    IColumnPropertyAccessor<T> columnPropertyAccessor) { 
    eventList = GlazedLists.eventList(values); 

    TransformedList<T, T> rowObjectsGlazedList = 
     GlazedLists.threadSafeList(eventList); 

    this.sortedList = new SortedList<>(rowObjectsGlazedList, null); 

    // wrap the SortedList with the FilterList 
    this.filterList = new FilterList<>(sortedList); 
    this.bodyDataProvider = new ListDataProvider<>(this.filterList, 
     columnPropertyAccessor); 
    this.bodyDataLayer = new DataLayer(getBodyDataProvider()); 

    // layer for event handling of GlazedLists and PropertyChanges 
    GlazedListsEventLayer<T> glazedListsEventLayer = new 
     GlazedListsEventLayer<>(bodyDataLayer, this.filterList); 

    this.selectionLayer = new SelectionLayer(glazedListsEventLayer); 
    ViewportLayer viewportLayer = new ViewportLayer(getSelectionLayer()); 

    setUnderlyingLayer(viewportLayer); 
} 

private void enableSorting() { 
    this.nattable.addConfiguration(new SingleClickSortConfiguration()); 
} 
+0

Как вы заполняете данные? –

+0

заблокировать eventList и добавить его прямо к этому – ekjcfn3902039

+0

И каков список начальных значений? Пустой список или нуль? –

ответ

1

Похоже, создание вашего SortHeaderLayer не является правильным. Последний параметр GlazedListsSortModel должен быть IDataLayer заголовка столбца, а не слоем тела.

Изменение кода на следующее должно заставить все работать. Это по крайней мере на моей стороне.

SortHeaderLayer<T> sortHeaderLayer = new SortHeaderLayer<> 
    (columnHeaderLayer, new GlazedListsSortModel<T> 
    (bodyLayerStack.getSortedList(), columnPropertyAccessor, 
    configRegistry,      
    columnHeaderDataLayer), false); 
+0

Ты мужчина! :) Вот и все. Большое спасибо за вашу помощь!! – ekjcfn3902039

Смежные вопросы