Как настроить функции навигации по ячейкам таблицы NatTable для клавиш «TAB» и «СТРЕЛКА» для приемлемого удобства использования - PullRequest
1 голос
/ 07 июня 2019

При использовании стандартной навигации с помощью клавиш со стрелками «Вверх», «Вниз», «Влево», «Вправо» ячейка «Режим выбора» должна перемещаться в соответствующем направлении. Без сомнения, эта функция работает после добавления этого кода.

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);

1 Ответ

1 голос
/ 07 июня 2019

То, что вы ищете, - это конфигурация стратегии обхода, которая была представлена ​​в NatTable 1.2 . Исходя из вашего объяснения, вам нужно настроить стратегию обхода TABLE_CYCLE в соответствии с вашими требованиями.

В приложении Примеры NatTable есть SelectionTraversalExample , который должен показать, какие опции у вас есть и как их настроить.

P.S. Движение выбора не имеет ничего общего с редактированием конфигурации!

...