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

How to configure NatTable FilterComboBox to have a different DataProvider for each column

在我的 NatTable 中,我使用类似于 ExcelLikeFilterRowCustomTypesExample 的 ComboBoxFilterRowHeaderComposite。它工作得相当好,但是组合框过滤在大 tables 中添加了太多项目以允许轻松过滤。然而,我试图通过只用某些项目填充组合来解决这个问题;在我的 table 中,有些列仅适用于具有有限数量的不同值的类型或操作,我想为它们添加所有选项。而对于其他列,我只想添加根项。

然而,为了实现这一点,我认为我需要修改 comboBoxDataProvider;为了获得我想要的全部效果,某些列需要不同的数据提供者。

这是正确的做法吗?如果是这样,我该怎么做呢?

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

    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);
        }
    });

如果默认筛选行具有用于单选的组合框,您可以为每一列使用不同的 IComboBoxDataProvider。但是你选择了后面有不同过滤机制的ComboBoxFilterRowHeaderComposite来支持多选和处理Select All类似于well-known电子表格应用程序。所以没有 build-in 机制可以简单地配置所需的行为。

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