为什么我不能在 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
.
我想在我的 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
.