可分组的nattable组合框过滤器标头 [英] nattable combobox filter header with group by

查看:142
本文介绍了可分组的nattable组合框过滤器标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用"ComboBoxFilterRowHeaderComposite"实现nattable.

I am trying to implement nattable with "ComboBoxFilterRowHeaderComposite".

过滤工作正常,但是当我尝试按分组方式过滤行后,它会引发以下异常

Filtering is working fine but after filtering rows when I try to do group by, it throws following exception

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.remove(ArrayList.java:492) at ca.odell.glazedlists.FunctionList.listChanged(FunctionList.java:283) at ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:424) at ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:421) at ca.odell.glazedlists.event.SequenceDependenciesEventPublisher$SubjectAndListener.firePendingEvent(SequenceDependenciesEventPublisher.java:445) at ca.odell.glazedlists.event.SequenceDependenciesEventPublisher.fireEvent(SequenceDependenciesEventPublisher.java:344) at ca.odell.glazedlists.event.ListEventAssembler.commitEvent(ListEventAssembler.java:317) at ca.odell.glazedlists.TransformedList.clear(TransformedList.java:98) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByDataLayer$1.run(GroupByDataLayer.java:286) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByDataLayer.updateTree(GroupByDataLayer.java:272) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByDataLayer.update(GroupByDataLayer.java:313) at java.util.Observable.notifyObservers(Observable.java:159) at java.util.Observable.notifyObservers(Observable.java:115) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByModel.update(GroupByModel.java:124) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByModel.addGroupByColumnIndex(GroupByModel.java:44)

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.remove(ArrayList.java:492) at ca.odell.glazedlists.FunctionList.listChanged(FunctionList.java:283) at ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:424) at ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:421) at ca.odell.glazedlists.event.SequenceDependenciesEventPublisher$SubjectAndListener.firePendingEvent(SequenceDependenciesEventPublisher.java:445) at ca.odell.glazedlists.event.SequenceDependenciesEventPublisher.fireEvent(SequenceDependenciesEventPublisher.java:344) at ca.odell.glazedlists.event.ListEventAssembler.commitEvent(ListEventAssembler.java:317) at ca.odell.glazedlists.TransformedList.clear(TransformedList.java:98) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByDataLayer$1.run(GroupByDataLayer.java:286) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByDataLayer.updateTree(GroupByDataLayer.java:272) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByDataLayer.update(GroupByDataLayer.java:313) at java.util.Observable.notifyObservers(Observable.java:159) at java.util.Observable.notifyObservers(Observable.java:115) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByModel.update(GroupByModel.java:124) at org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.GroupByModel.addGroupByColumnIndex(GroupByModel.java:44)

这是我的ComboBoxFilterRowHeaderComposite结构:

Here is my structure for ComboBoxFilterRowHeaderComposite:

filterRowHeaderLayer = new ComboBoxFilterRowHeaderComposite<T>( bodyLayerStack.getFilterList(), bodyLayerStack.getGlazedListsEventLayer(), bodyLayerStack.getSortedList(), columnAccessor, columnHeaderLayer, dataProvider, configRegistry);

filterRowHeaderLayer = new ComboBoxFilterRowHeaderComposite<T>( bodyLayerStack.getFilterList(), bodyLayerStack.getGlazedListsEventLayer(), bodyLayerStack.getSortedList(), columnAccessor, columnHeaderLayer, dataProvider, configRegistry);

哪里

columnAccessor =新的ReflectiveColumnPropertyAccessor(propertyNames);

columnAccessor = new ReflectiveColumnPropertyAccessor(propertyNames);

columnGroupHeaderLayer =新的DynamicColumnGroupHeaderLayer(sortHeaderLayerStack,bodyLayerStack.getSelectionLayer(), bodyLayerStack.getColumnGroupModel(),tr);

columnGroupHeaderLayer = new DynamicColumnGroupHeaderLayer(sortHeaderLayerStack, bodyLayerStack.getSelectionLayer(), bodyLayerStack.getColumnGroupModel(), tr);

DataProvider是com.vanguard.tip.epm.platform.ui.grid.next.DynamicColumnHeaderDataProvider;

DataProvider is com.vanguard.tip.epm.platform.ui.grid.next.DynamicColumnHeaderDataProvider;

之后

CornerLayerStack cornerLayerStack = new CornerLayerStack(rowHeaderLayerStack, filterRowHeaderLayer);

CompositeLayer gridLayer = new GridLayer(bodyLayerStack, filterRowHeaderLayer, rowHeaderLayerStack, cornerLayerStack);

然后在GroupByHeaderLayer中添加gridLayer:

Then Add gridLayer in GroupByHeaderLayer:

groupByHeaderLayer = new GroupByHeaderLayer(bodyLayerStack.getGroupByModel(), gridLayer, columnHeaderLayerStack.getDataProvider(), new GroupByHeaderConfigurationWrapper(bodyLayerStack.getGroupByModel(), columnHeaderLayerStack.getDataProvider(), bodyLayerStack.getColumnGroupModel()));

groupByHeaderLayer = new GroupByHeaderLayer(bodyLayerStack.getGroupByModel(), gridLayer, columnHeaderLayerStack.getDataProvider(), new GroupByHeaderConfigurationWrapper(bodyLayerStack.getGroupByModel(), columnHeaderLayerStack.getDataProvider(), bodyLayerStack.getColumnGroupModel()));

CompositeLayer groupByComposite = new CompositeLayer(1, 2);

groupByComposite.setChildLayer(GroupByHeaderLayer.GROUP_BY_REGION, groupByHeaderLayer, 0, 0);

groupByComposite.setChildLayer("Grid", gridLayer, 0, 1);

我希望这可以使您对我对Nattable的使用有所了解.

I hope this will give you some clarity about my use of Nattable.

当我使用具有相同结构的基于文本的过滤器时,分组工作正常:

When I use text base filter with same structure Grouping is working fine:

filterStrategy = new DefaultGlazedListsFilterStrategy<T>(bodyLayerStack.getFilterList(), columnAccessor, configRegistry);

this.filterRowHeaderLayer = new FilterRowHeaderComposite<T>(filterStrategy, columnHeaderLayer, dataProvider, configRegistry);

让我知道是否需要更多信息.

Let me know if you need more information.

推荐答案

似乎是该组合的错误.我为此创建了以下票证:

Seems to be a bug for that combination. I created the following ticket for this:

https://bugs.eclipse.org/bugs/show_bug.cgi ?id = 508334

这篇关于可分组的nattable组合框过滤器标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆