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

时间:2019-04-24 20:35:59

标签: eclipse-rcp nattable

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

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

使用NatTable可以轻松实现吗?

到目前为止,我想出的最好的办法是随着焦点的变化在DisplayMode.SELECT的不同属性之间进行切换-但我不确定在NatTable.configure()被执行之后是否可以这样做叫。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在@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);

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

private static Color myInactiveColor = ...;

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

    rv.setAttributeValue( CellStyleAttributes.BACKGROUND_COLOR,
        myInactiveColor );

    return rv;
}

可以对选定的行标题和列标题的样式进行类似的工作。