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