【发布时间】:2019-12-17 01:50:07
【问题描述】:
我的NatTable 包含由视口、主体和选择层组成的CompositeFreezeLayer。
我想禁用冻结行的行选择。
这意味着,在我的表中,我有 15 行。在这些中,有 5 行被冻结,应该禁用该行以供选择。其他 10 行应启用行/单元格选择。
目前默认情况下所有行都在选择,可能应该通过选择层默认配置。
如何只禁用几行的行选择?
【问题讨论】:
我的NatTable 包含由视口、主体和选择层组成的CompositeFreezeLayer。
我想禁用冻结行的行选择。
这意味着,在我的表中,我有 15 行。在这些中,有 5 行被冻结,应该禁用该行以供选择。其他 10 行应启用行/单元格选择。
目前默认情况下所有行都在选择,可能应该通过选择层默认配置。
如何只禁用几行的行选择?
【问题讨论】:
实现一个自定义命令处理程序,用于检查位置并使用命令获取冻结区域中的位置。对于其他行转发命令。在 CompositeFreezeLayer 上注册该命令处理程序。
【讨论】:
由于我想禁用冻结层上的行选择和单元格选择,因此请检查命令的实例并转发命令。
public class CustomFreezeLayerCommandHandler implements ILayerCommandHandler<ILayerCommand>
{
private int endRowOfFrozenLayer;
public CustomFreezeLayerCommandHandler(final int lastRowOfFrozenLayer)
{
this.endRowOfFrozenLayer = lastRowOfFrozenLayer;
}
@Override
public boolean doCommand(final ILayer targetLayer, final ILayerCommand command)
{
if (command instanceof ViewportSelectRowCommand)
{
return (((ViewportSelectRowCommand) command).getRowPosition() <= this.endRowOfFrozenLayer);
}
else if (command instanceof SelectCellCommand)
{
return (((SelectCellCommand) command).getRowPosition() <= this.endRowOfFrozenLayer);
}
return false;
}
@Override
public Class<ILayerCommand> getCommandClass()
{
return ILayerCommand.class;
}
}
【讨论】: