2017-02-21 19 views
0

我想在我的NatTable中为所有单元实现一个MouseEvent,它们是通过ComboBoxCellEditor类实现的。如果在组合框上发生一次单击,则应打开包含条目的下拉框。为此,我在我的UiBindingRegistry中注册了FirstSingleClickBinding。为什么我不能在Java NatTable中使用特定的CellEditor实现CellEditorMouseEventMatcher?

我使用了BodyCellEditorMouseEventMatcher,它工作完美。但由于这个匹配器已被弃用,我不想再使用它了。所以它说我应该使用我尝试过的CellEditorMouseEventMatcher,但它不能像我期望的那样工作。 的CellEditorMouseEventMatcher的文档说以下内容:{@link IMouseEventMatcher}

实施,将检查是否 编辑
*应被激活。为此,它可以指定 区域标签
*反应上,用鼠标右键单击 ,如果一个编辑器是
*登记在其中执行鼠标 单击单元格。如果没有指定区域
*标签,则仅评估鼠标 按钮和存在单元编辑器
*。

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

这里是我的“过时”代码:

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

如果您需要了解更多信息,请让我知道。 谢谢:)

回答

1

随着CellEditorMouseEventMatcher你不需要指定编辑器的实现。您只能指定区域和按钮(都是可选的)。如果编辑器应该被打开或者不通过检查是否存在编辑器来完成。编辑器的类型无关紧要。

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

随着你需要注册为您添加的每个编辑一个新的匹配的BodyCellEditorMouseEventMatcher。这是一个设计缺陷,因为编辑器的类型应该不重要。单元格是否可编辑的控制是通过IEditableRule或甚至通过注册单元格编辑器完成的。

因此,最终您需要确保您只注册可编辑单元格的编辑器,这意味着您需要调整配置以确保TextCellEditor未注册为默认编辑器(请参阅DefaultEditConfiguration)。或者,您指定的IEditableRule仅在编辑器类型为ComboBoxCellEditor时才计算为true,或者仅在与编辑器相同的标签上以及默认为IEditableRule#NEVER_EDITABLE时才更好地注册IEditableRule#ALWAYS_EDITABLE

+0

谢谢您的快速回复!实际上几乎所有我使用的单元都是可编辑的。但是我不希望正常单元格每次点击它时都进入“编辑模式”(并且它会覆盖我认为的选择事件)。 所有的组合框在右边都有这个小箭头,它们打开它们的条目。我想要完全相同的行为,如果你单击它们(所以你不必“瞄准”箭头)。你知道我能做到这一点吗? – mkaay

+1

这是默认行为。不需要为此做特别的事情。 –

+0

噢......所以我的代码中的某些东西会覆盖这个功能......迄今为止非常感谢! :) – mkaay

相关问题