当 NatTable 不在焦点时如何将选择突出显示为灰色

How to gray selection highlight when NatTable not in focus

某些列表和表格在失去键盘焦点时会将其选择变灰。

在存在多个 lists/tables 的情况下,这有助于向用户传达哪个选择处于活动状态。

有没有使用 NatTable 的简单方法?

到目前为止,我想出的最好办法是随着焦点来来去去,在 DisplayMode.SELECT 的不同属性之间切换——但我不确定在 NatTable.configure() 之后我是否可以做到这一点已调用。

是的,您可以在调用 NatTable#configure() 后动态更改配置属性。这是动态变化的常用方法。另一种方法是为特殊标签配置选择样式,并仅在 table 处于活动状态时应用该标签。这种方法可以在这个例子中看到。

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

在@DirkFauth 的回答之后,我已经开始工作了。这个答案包括一些细节。

table配置好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);

当 table 处于非活动状态时,selectedStyleanchorStyle 可以修改为它们通常设置的克隆。例如:

private static Color myInactiveColor = ...;

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

    rv.setAttributeValue( CellStyleAttributes.BACKGROUND_COLOR,
        myInactiveColor );

    return rv;
}

可以对所选行和列的样式进行类似的工作headers。