为什么我不能在 Java NatTable 中使用特定的 CellEditor 实现 CellEditorMouseEventMatcher?

Why can't I implement a CellEditorMouseEventMatcher with a specific CellEditor in Java NatTable?

我想在我的 NatTable 中为所有单元格实现一个 MouseEvent,这些单元格是通过 ComboBoxCellEditor class 实现的。如果单击组合框,将打开包含条目的下拉框。因此,我在我的 UiBindingRegistry 中注册了一个 FirstSingleClickBinding。

我使用了 BodyCellEditorMouseEventMatcher,它运行良好。但是由于这个匹配器已被弃用,我不想再使用它了。所以它说我应该使用我尝试过的 CellEditorMouseEventMatcher,但它没有按我预期的方式工作。 CellEditorMouseEventMatcher 的文档说明如下:

Implementation of {@link IMouseEventMatcher} that will check if editing
* should be activated. For this it is possible to specify the region label to
* react on, the mouse button that was used to click and if an editor is
* registered for the cell on which the mouse click was executed. If no region
* label is specified, only the mouse button and the presence of a cell editor
* is evaluated.

但是我不能使用单元格编辑器作为参数所以最后一句是什么意思?我只能选择给按钮 and/or 一个区域标签作为参数。如何使用此 EventMatcher 获得与 BodyCellEditorMouseEventMatcher 相同的结果?我使用不同类型的单元格,因此只有组合框才会出现这种行为很重要。

这是我的“弃用”代码:

private void editCombosOnSingleClick(final UiBindingRegistry uiBindingRegistry) {
    uiBindingRegistry.registerFirstSingleClickBinding(new BodyCellEditorMouseEventMatcher(ComboBoxCellEditor.class),
        new MouseEditAction());
}

如果您需要更多信息,请告诉我。 谢谢:)

使用 CellEditorMouseEventMatcher 您无需指定编辑器实现。您只需指定区域和按钮(都是可选的)。是否应该打开编辑器只需检查是否有编辑器即可。编辑器的类型无关紧要。

uiBindingRegistry.registerSingleClickBinding(
            new CellEditorMouseEventMatcher(GridRegion.BODY, MouseEventMatcher.LEFT_BUTTON),
            new MouseEditAction());

使用 BodyCellEditorMouseEventMatcher 您需要为添加的每个编辑器注册一个新的匹配器。这是一个设计缺陷,因为编辑器的类型应该无关紧要。通过 IEditableRule 或什至通过注册单元格编辑器来控制单元格是否可编辑。

所以最后您需要确保您只为可编辑单元格注册编辑器,这反过来意味着您需要调整配置以确保 TextCellEditor 未注册为默认编辑器(请参阅DefaultEditConfiguration)。或者您指定一个 IEditableRule 仅在编辑器类型为 ComboBoxCellEditor 时才计算为真,甚至更好地只为与编辑器相同的标签注册 IEditableRule#ALWAYS_EDITABLE,默认情况下 IEditableRule#NEVER_EDITABLE.