Копирование заголовков в NatTables в Eclipse

#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));