Как выбрать весь столбец при выборе ячейки строки в NatTable? - PullRequest
0 голосов
/ 22 октября 2019

У нас есть NatTable без заголовка, и я обработал 1-ю строку как заголовок. - Зарегистрируйте CELL_PAINTER, чтобы изменить визуализацию так, чтобы она выглядела аналогично заголовку.

  • Также зарегистрирован CustomCommandHandler, который реализуетILayerCommandHandler для предотвращения выбора ячеек / строк для 1-й строки.
   selectionLayer.registerCommandHandler(new CustomCommandHandler());
  • Выбор ячеек работает нормально для других ячеек.
  public boolean doCommand(final ILayer layer, final ILayerCommand command)
          {
            if (command instanceof ViewportSelectRowCommand)
            {
               return ((ViewportSelectRowCommand) command).getRowPosition() <= 1;
            }
            else if (command instanceof SelectCellCommand)
            {
              return ((SelectCellCommand) command).getRowPosition() <= 1
            }
            return false;
          }

Теперь, как мне выбрать весь столбец при выборе ячеек в 1-й строке. Так что это не должно влиять на выбор ячеек для других ячеек строки.

При щелчке любой ячейки в 1-й строке следует выбрать весь столбец.

При щелчке любой ячейки в других строках следует выбрать эту же ячейку. (в настоящее время это происходит)

1 Ответ

0 голосов
/ 25 октября 2019

Хотя я не совсем уверен, какой смысл иметь только тело, которое настроено сложным образом, чтобы выглядеть и вести себя так, как будто у него есть заголовки без реального заголовка (ИМХО это не имеет никакого смысла), вам нужнозарегистрировать пользовательский обработчик, который проверяет положение столбца и преобразует SelectCellCommand в SelectColumnCommand.

this.selectionLayer.registerCommandHandler(new SelectCellCommandHandler(this.selectionLayer) {

    @Override
    public boolean doCommand(ILayer targetLayer, SelectCellCommand command) {
        if (command.convertToTargetLayer(targetLayer)
                && command.getColumnPosition() == 0) {
            return targetLayer.doCommand(
                    new SelectColumnCommand(
                            targetLayer,
                            command.getColumnPosition(),
                            command.getRowPosition(),
                            command.isShiftMask(),
                            command.isControlMask()));
        }
        return super.doCommand(targetLayer, command);
    }
});

Но я ожидаю, что на пути будут возникать другие проблемы, поскольку имитируемые заголовки не ведут себя какреальные заголовки также в других сценариях. Вы также можете попытаться переопределить getRegionLabelsByXY(int, int), но я не уверен, сработает ли это или вызовет больше проблем.

...