我如何 select 在 NatTable 中 selecting 行单元格上的整个列?
How do I select entire column on selecting row cell in NatTable?
我们有一个没有 header 的 NatTable,我将第一行视为 Header,
- 注册 CELL_PAINTER 以更改可视化效果,使该行看起来类似于 header。
- 还注册了实现 ILayerCommandHandler 的 CustomCommandHandler,以防止第一行出现 cell/row selection。
selectionLayer.registerCommandHandler(new CustomCommandHandler());
- Cell selection 对其他细胞工作正常。
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)
,但我不确定这是否有效或会导致更多问题。
我们有一个没有 header 的 NatTable,我将第一行视为 Header, - 注册 CELL_PAINTER 以更改可视化效果,使该行看起来类似于 header。
- 还注册了实现 ILayerCommandHandler 的 CustomCommandHandler,以防止第一行出现 cell/row selection。
selectionLayer.registerCommandHandler(new CustomCommandHandler());
- Cell selection 对其他细胞工作正常。
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)
,但我不确定这是否有效或会导致更多问题。