При использовании стандартной навигации с помощью клавиш со стрелками «Вверх», «Вниз», «Влево», «Вправо» ячейка «Режим выбора» должна перемещаться в соответствующем направлении.
Без сомнения, эта функция работает после добавления этого кода.
gridLayer.addConfiguration (new 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));
// выделение с помощью мыши работает правильно
gridLayer.setRegionName (GridRegion.BODY); * 1 052 *
// 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);