Как выделить выделение серым цветом, когда таблица NatTable не в фокусе

#eclipse-rcp #nattable

#eclipse-rcp #nattable

Вопрос:

Некоторые списки и таблицы выделяются серым цветом, когда теряют фокус клавиатуры.

При наличии нескольких списков / таблиц это помогает сообщить пользователю, какой выбор активен.

Есть ли простой способ сделать это с помощью NatTable?

Лучшее, что я придумал на данный момент, это переключаться между различными атрибутами для DisplayMode.SELECT того, как фокус приходит и уходит — но я не уверен, что смогу сделать это после того, как NatTable.configure() был вызван.

Ответ №1:

Да, вы можете динамически изменять атрибуты конфигурации после NatTable#configure() вызова. Это обычный подход для динамических изменений. Другим подходом было бы настроить стиль выделения для специальной метки и применить эту метку только в том случае, если таблица активна. Этот подход можно увидеть в этом примере.

https://github.com/eclipse/nebula.widgets.nattable/blob/master/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_505_Selection/_5054_SelectionProviderExample.java

Ответ №2:

У меня это работает после ответа @ DirkFauth. Этот ответ включает в себя некоторые особенности.

После того, как таблица была настроена с помощью NatTable.configure() , вы можете изменить конфигурацию не с помощью NatTable.addConfiguration(IConfiguration) , а вместо этого с помощью вызова IConfiguration.configureRegistry(IConfigRegistry) . Например:

   myConfiguration.configureRegistry( myTable.getConfigRegistry() )
  

В рамках этой реализации configureRegistry() вы можете задать стиль для выделенных и привязанных ячеек:

     configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE,
          selectedStyle, DisplayMode.SELECT, GridRegion.BODY);

    configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE,
          anchorStyle, DisplayMode.SELECT,
          SelectionStyleLabels.SELECTION_ANCHOR_STYLE);
  

Когда таблица неактивна, selectedStyle и anchorStyle могут быть изменены клоны их обычной настройки. Например:

 private static Color myInactiveColor = ...;

public static Style makeInactiveBodyCellStyleFrom(@Nonnull Style style) {
    Style rv = style.clone();

    rv.setAttributeValue( CellStyleAttributes.BACKGROUND_COLOR,
        myInactiveColor );

    return rv;
}
  

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