#nebula
#туманность
Вопрос:
Я хочу также копировать заголовок строки каждый раз, когда некоторые строки копируются в буфер обмена. Я нашел это: класс обработчика для копирования выбранных данных в SelectionLayer в буфер обмена. Этот обработчик по умолчанию зарегистрирован в SelectionLayer, без ссылок на области заголовка. Вы можете переопределить поведение копирования данных, зарегистрировав экземпляр этого обработчика на уровне выше SelectionLayer . Таким образом, зарегистрированный пользовательский экземпляр будет использовать CopyDataToClipboardCommand и зарегистрированный обработчик по умолчанию вызываться не будет.
Но я не очень хорошо это понимаю. Я бегу:
public class CopyDataAction implements IKeyAction {
public void run(NatTable natTable, KeyEvent event) {
natTable.doCommand(new CopyDataToClipboardCommand("t", System.getProperty("line.separator"),
natTable.getConfigRegistry()));
}
}
Можно просто изменить какую-то конфигурацию? Или я должен реализовать свой собственный обработчик для перезаписи поведения по умолчанию?
Ответ №1:
Вам необходимо зарегистрировать экземпляр CopyDataCommandHandler
, который создается со ссылками на слой заголовка на слое выше SelectionLayer
. На самом деле должно быть также возможно зарегистрировать его на SelectionLayer
, поскольку он должен переопределять зарегистрированный по умолчанию экземпляр.
Для этого нет никакой конфигурации. Вам необходимо настроить с помощью обработчика команд. Но существующая реализация предоставляет возможность достичь того, чего вы хотите, без необходимости создания пользовательского обработчика команд.
В этом примере показано, как это сделать: https://github.com/eclipse/nebula.widgets.nattable/blob/master/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_700_AdditionalFunctions/_751_CopyExample.java
Комментарии:
1. Спасибо за ответ. Я понял, что мне нужно, я просто не знал, как это реализовать. Теперь это работает, в моем коде:
bodyLayerStack.registerCommandHandler(new CopyDataCommandHandler(bodyLayerStack.getSelectionLayer(), columnHeaderDataLayer, null));