Java 如何定制NatTable的表单元格导航功能;标签";及;箭头“;可接受可用性的关键

Java 如何定制NatTable的表单元格导航功能;标签";及;箭头“;可接受可用性的关键,java,eclipse,nattable,Java,Eclipse,Nattable,使用标准键盘导航“向上”、“向下”、“向左”、“向右”箭头键应将“选择模式”单元格移动到各自的方向。 毫无疑问,添加此代码后,此功能仍在工作 gridLayer.addConfiguration(新的DefaultEditBindings()) gridLayer.addConfiguration(新的DefaultEditConfiguration()) 现在我想为特殊情况实现编辑绑定。 “特殊移动案例”: 移动“选择模式”单元格时,应考虑所有模式下的以下特殊情况: 如果到达行的最右侧单元格

使用标准键盘导航“向上”、“向下”、“向左”、“向右”箭头键应将“选择模式”单元格移动到各自的方向。 毫无疑问,添加此代码后,此功能仍在工作

gridLayer.addConfiguration(新的DefaultEditBindings())

gridLayer.addConfiguration(新的DefaultEditConfiguration())

现在我想为特殊情况实现编辑绑定。 “特殊移动案例”: 移动“选择模式”单元格时,应考虑所有模式下的以下特殊情况:

  • 如果到达行的最右侧单元格,并且请求向右移动,“选择模式”应移动到下一行的最左侧单元格

  • 如果到达行的最左侧单元格,并请求向左移动,“选择模式”应移动到前一行的最右侧单元格

  • 如果到达最后一行中最右边的单元格,并且请求向右移动,“选择模式”应移动到第一行中最左边的单元格

  • 如果到达第一行最左边的单元格,并请求向左移动,“选择模式”应移至最后一行最右边的单元格

  • 如果到达最后一行的单元格,并请求向下移动,“选择模式”应移动到右侧下一列第一行的单元格

  • 如果到达第一行的单元格,并请求向上移动,“选择模式”应移动到左上一列最后一行的单元格

  • 如果到达最后一行最右边的单元格,并请求向下移动,“选择模式”应移动到第一行最左边的单元格

  • 如果到达第一行最左边的单元格,并请求向上移动,“选择模式”应移动到最后一行最右边的单元格

如何实现这一点,示例是否有用

 // === Body layer ===
final DataLayer bodyDataLayer = new DataLayer(this.bodyDataProvider);
// add configuration tags (ConfigLabels) for body cells
bodyDataLayer.setConfigLabelAccumulator(this.configLabelAccumulator);

// remaining standard body layers
final DefaultBodyLayerStack bodyLayerStack = new DefaultBodyLayerStack(bodyDataLayer);
this.selectionLayer = bodyLayerStack.getSelectionLayer();

ViewportLayer viewportLayer = new ViewportLayer(this.selectionLayer);
// as the selection mouse bindings are registered for the region label
// GridRegion.BODY we need to set that region label to the viewport so

final FreezeLayer freezeLayer = new FreezeLayer(this.selectionLayer);
final CompositeFreezeLayer compositeFreezeLayer = new CompositeFreezeLayer(freezeLayer, bodyLayerStack.getViewportLayer(), this.selectionLayer);
final ILayer bodyLayer = compositeFreezeLayer;

// === Column header layer ===
final ILayer columnHeaderLayer = new ColumnHeaderLayer(new DefaultColumnHeaderDataLayer(this.columnHeaderDataProvider), bodyLayer, this.selectionLayer);

// === Row header layer ===
final ILayer rowHeaderLayer = new RowHeaderLayer(new DefaultRowHeaderDataLayer(this.rowHeaderDataProvider), bodyLayer, this.selectionLayer);

// === Corner layer ===
final CornerLayer cornerLayer = new CornerLayer(new DataLayer(this.cornerDataProvider), rowHeaderLayer, columnHeaderLayer);

// === Grid layer ===
final GridLayer gridLayer = new GridLayer(bodyLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer, false);
// overwrite default AutoResizeColumnCommandHandler, which only supported auto-resizing of body layer columns
// gridLayer.registerCommandHandler(new GridLayerAutoResizeColumnCommandHandler(gridLayer));
gridLayer.registerCommandHandler(new AutoResizeColumnCommandHandler(gridLayer));
//通过鼠标进行的选择工作正常 setRegionName(GridRegion.BODY)


您需要的是随引入的遍历策略配置。根据您的解释,您需要配置
表\u循环
遍历策略以满足您的需求

NatTable示例应用程序中提供了一个示例,它应该显示您有哪些选项以及如何配置这些选项


另外,选择移动与编辑配置无关

我已经编辑了我的描述并添加了代码片段,但是遍历仍然不能正常工作,有什么遗漏吗?是的,我们必须将它注册到gridlayer而不是viewportlayes。
// register a MoveCellSelectionCommandHandler with
// TABLE_CYCLE_TRAVERSAL_STRATEGY
gridLayer.registerCommandHandler(
    new MoveCellSelectionCommandHandler(this.selectionLayer, ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY));

// NatTable
this.natTable = new NatTable(this, SWT.H_SCROLL | SWT.V_SCROLL |   SWT.BORDER, gridLayer, false);