我如何 select 在 NatTable 中 selecting 行单元格上的整个列?

How do I select entire column on selecting row cell in NatTable?

我们有一个没有 header 的 NatTable,我将第一行视为 Header, - 注册 CELL_PAINTER 以更改可视化效果,使该行看起来类似于 header。

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

现在我如何 select 整列 select 第 1 行的单元格。这样它就不会影响其他行单元格的单元格 selection。

点击第一行的任何单元格应该 select 整列。

单击其他行上的任何单元格应该 select 相同的单元格。 (目前正在发生)

虽然我不太确定只有一个 body 有什么意义,它以复杂的方式配置,看起来和行为就像它有 headers 而实际上没有 headers(恕我直言,这没有任何意义),您需要注册一个自定义处理程序来检查列位置并将 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);
    }
});

但我预计会出现更多问题,因为模仿的 headers 在其他情况下也不会表现得像真实的 headers。您也可以尝试覆盖 getRegionLabelsByXY(int, int),但我不确定这是否有效或会导致更多问题。