如何配置NatTable FilterComboBox为每个列具有不同的DataProvider

时间:2019-06-11 15:05:31

标签: java eclipse swt nattable

在我的NatTable中,我正在使用类似于ExcelLikeFilterRowCustomTypesExample的ComboBoxFilterRowHeaderComposite。它工作得很好,但是组合框过滤在大型表中添加了太多项目,以至于无法轻松过滤。我试图通过仅用某些项目填充组合来解决此问题;在我的表格中,有些列仅用于类型或操作,这些类型或操作具有有限的不同值,我想为这些添加所有选项。对于其他列,我只想添加根项目。

要实现这一点,我想我需要修改comboBoxDataProvider。为了获得完整的效果,我希望某些列需要使用不同的dataprovider。

这是正确的方法吗?如果是这样,我将如何去做呢?

这是我当前配置组合框组合的方式:

    ComboBoxFilterRowHeaderComposite<GroupedPerfRecord> filterRowHeaderLayer =
            new ComboBoxFilterRowHeaderComposite<GroupedPerfRecord>(
                    bodyLayerStack.getFilterList(),
                    bodyLayerStack.getBodyDataLayer(),
                    bodyLayerStack.getSortedList(),                     
                    columnPropertyAccessor, columnHeaderLayer,
                    columnHeaderDataProvider, configRegistry, false);

    final IComboBoxDataProvider comboBoxDataProvider = filterRowHeaderLayer.getComboBoxDataProvider();
    filterRowHeaderLayer.addConfiguration(new ComboBoxFilterRowConfiguration() {
        {
            this.cellEditor = new FilterRowComboBoxCellEditor(comboBoxDataProvider, 5);
            this.filterIconPainter = new ComboBoxFilterIconPainter(comboBoxDataProvider, GUIHelper.getImage("filter"), null);
        }
    });

1 个答案:

答案 0 :(得分:0)

对于具有用于单个选择的组合框的默认过滤器行,您将为每列使用不同的IComboBoxDataProvider。但是,您选择了ComboBoxFilterRowHeaderComposite,该过滤器的背面采用了不同的过滤机制,以支持类似于众所周知的电子表格应用程序的 Select All 的多重选择和处理。因此,没有内置的机制可以简单地配置所需的行为。

但是ComboBoxFilterRowHeaderComposite中有一个使用FilterRowComboBoxDataProvider作为参数的构造函数。因此,您可以提供自己的FilterRowComboBoxDataProvider实现(也许是GlazedListsFilterRowComboBoxDataProvider的子类),并根据列索引在getValue()中实现所需的行为。