NatTable — как реализовать собственный CopyDataToClipboardSerializer

в CopyDataToClipboardSerializer мне нужно переопределить переменную copiedCells.

Я использую NatTableFactory.class, где создаю таблицу, регистрирую новую CopyDataCommandHandler, переопределяю стиль таблицы и так далее. Но я не знаю, как переопределить CopyDataToClipboardSerializer. Или я должен зарегистрировать новый и создать свой класс?


person Michal Kotus    schedule 13.01.2021    source источник


Ответы (1)


Я не знаю вашего класса NatTableFactory. Поэтому я не уверен, что вы делаете внутри этого класса.

Если вам нужен собственный сериализатор, чтобы, например, заменить разрывы строк в тексте на пробел, чтобы избежать нарушения структуры таблицы, вам нужно создать собственную реализацию и использовать ее.

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 следующим образом, если заголовки также должны быть экспортированы:

CopyDataCommandHandler copyHandler =
        new MyCopyDataCommandHandler(
                selectionLayer,
                columnHeaderDataLayer,
                rowHeaderDataLayer);
gridLayer.registerCommandHandler(copyHandler);
person Dirk Fauth    schedule 13.01.2021
comment
это то, что я искал. Большое спасибо, я бы купил вам пиво или что-нибудь еще @Dirk Fauth - person Michal Kotus; 13.01.2021