Копировать заголовки в NatTables в Eclipse

Я хочу также копировать заголовок строки каждый раз, когда некоторые строки копируются в буфер обмена. Я нашел это: Класс Handler для копирования выбранных данных в 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()));
}

}

Можно просто изменить какую-то конфигурацию? Или я должен реализовать свой собственный обработчик, чтобы перезаписать поведение по умолчанию?


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


Ответы (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

person Dirk Fauth    schedule 18.12.2020
comment
Спасибо за ответ. Я понял, что мне нужно, просто не знал, как это реализовать. Теперь он работает, в моем коде: bodyLayerStack.registerCommandHandler(new CopyDataCommandHandler(bodyLayerStack.getSelectionLayer(), columnHeaderDataLayer, null)); - person Michal Kotus; 08.01.2021
comment
Тогда вы также можете принять ответ. :) - person Dirk Fauth; 08.01.2021