NatTable 单元格编辑应该禁止输入任何 "regular" 个字符,例如字母或数字

NatTable Cell editing should disable on typing any "regular" characters such as letters or digits

  1. 我想在输入任何 "regular" 个字符(例如字母或数字)时取消注册 NatTable 单元格编辑。 即在输入任何数字或字符时无事可做。

  2. 还有一个问题,我已经将 TABLE_CYCLE_TRAVERSAL_STRATEGY 注册到我的网格层中,使用箭头键和 Tab 键也能正常工作。 但是当我们按下回车键时,单元格选择移动到下一个单元格。

gridLayer.registerCommandHandler(new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));

但我想实现这样一种方式,即在按下 Enter 键时,我需要编辑选定的单元格。

您需要创建和注册自定义配置。

  1. DefaultEditBindings 需要去掉这两个配置,避免按键激活编辑模式

    uiBindingRegistry.registerKeyBinding(
            new LetterOrDigitKeyEventMatcher(),
            new KeyEditAction());
    uiBindingRegistry.registerKeyBinding(
            new LetterOrDigitKeyEventMatcher(SWT.MOD2),
            new KeyEditAction());
    
  2. DefaultSelectionBindings#configureMoveDownBindings() 删除以下行以禁用 ENTER

    上的选择移动
    uiBindingRegistry.registerKeyBinding(
            new KeyEventMatcher(SWT.NONE, SWT.CR), action);
    uiBindingRegistry.registerKeyBinding(
            new KeyEventMatcher(SWT.MOD1, SWT.CR), action);
    
  3. 注册以下 UI 绑定以在 ENTER 和 SHIFT+ENTER 上启用编辑

    uiBindingRegistry.registerKeyBinding(
            new KeyEventMatcher(SWT.NONE, SWT.CR),
            new KeyEditAction());
    uiBindingRegistry.registerKeyBinding(
            new KeyEventMatcher(SWT.MOD1, SWT.CR),
            new KeyEditAction());
    

您还需要通过将 useDefaultConfiguration 构造函数参数设置为 false 来确保未注册默认配置。否则,提到的 ui 绑定仍然会被注册和触发(例如,对于 SelectionLayer,您需要一个自定义的 DefaultSelectionLayerConfiguration 来注册自定义的 DefaultSelectionBindings)。