NatTable - 如何实现自定义 CopyDataToClipboardSerializer

NatTable - how to implement custom CopyDataToClipboardSerializer

CopyDataToClipboardSerializer 我需要覆盖 copiedCells 变量。

我在创建 table 的地方使用 NatTableFactory.class,注册新的 CopyDataCommandHandler,覆盖 table 样式等等。但我不知道如何覆盖 CopyDataToClipboardSerializer。或者我应该注册一个新的并创建自己的 class?

我不知道你的 NatTableFactory class。所以我不确定你在 class.

里面做什么

如果您需要自定义序列化程序来将文本中的换行符替换为 space 以避免破坏 table 结构,您需要创建自定义实现并使用它。

class MyCopyDataCommandHandler extends CopyDataCommandHandler {

    public MyCopyDataCommandHandler(SelectionLayer selectionLayer, ILayer columnHeaderLayer, ILayer rowHeaderLayer) {
        super(selectionLayer, columnHeaderLayer, rowHeaderLayer);
    }

    @Override
    protected void internalDoCommand(CopyDataToClipboardCommand command, ILayerCell[][] assembledCopiedDataStructure) {
        ISerializer serializer = new MyCopyDataToClipboardSerializer(assembledCopiedDataStructure, command);
        serializer.serialize();
    }
}

class MyCopyDataToClipboardSerializer extends CopyDataToClipboardSerializer {

    public MyCopyDataToClipboardSerializer(ILayerCell[][] copiedCells, CopyDataToClipboardCommand command) {
        super(copiedCells, command);
    }

    @Override
    protected String getTextForCell(ILayerCell cell) {
        return super.getTextForCell(cell).replace('\n', ' ');
    }
}

然后像这样注册自定义 MyCopyDataCommandHandler 如果 headers 也应该被导出:

CopyDataCommandHandler copyHandler =
        new MyCopyDataCommandHandler(
                selectionLayer,
                columnHeaderDataLayer,
                rowHeaderDataLayer);
gridLayer.registerCommandHandler(copyHandler);