在NatTable单元格中显示图像

时间:2016-01-14 14:00:26

标签: java swt nattable

我对在NatTable细胞中使用图像有疑问。我的ConfigLabelAccumulator和Configuration看起来像这样

public class MyConfigLabelAccumulator implements IConfigLabelAccumulator {
  @Override
  public void accumulateConfigLabels(final LabelStack configLabels, final int columnPosition, final int rowPosition) {
    if (((rowPosition + columnPosition) % 2) == 0) {
      configLabels.addLabel("myLabel");
    }
  }
}

public class MyStyleConfiguration extends DefaultNatTableStyleConfiguration {
  @Override
  public void configureRegistry(final IConfigRegistry configRegistry) {
    super.configureRegistry(configRegistry);
    final Style style = new Style();
    style.setAttributeValue(CellStyleAttributes.IMAGE, GUIHelper.getImage("plus"));
    style.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_YELLOW);
    configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, style, DisplayMode.NORMAL, "myLabel");
    configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER, new CellPainterDecorator(new TextPainter(), CellEdgeEnum.RIGHT, new ImagePainter()), DisplayMode.NORMAL);
  }
}   

我这样配置

dataLayer.setConfigLabelAccumulator(new MyConfigLabelAccumulator());
...
natTable.addConfiguration(new MyStyleConfiguration());
...
natTable.configure();   

表看起来像预期的。我看到黄色背景细胞和细胞中的“+”图像。但是电话结束后

natTable.setTheme(new ModernNatTableThemeConfiguration());

我只看到黄色背景,没有图像。

UPD: 我已经使用IThemeExtension解决了这个问题,但可能还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

主题配置旨在覆盖现有样式。这允许在运行时也切换主题。

IThemeExtensions是使用条件样式扩展现有主题的方法。您当然也可以通过扩展existimg主题来创建自己的主题,但这样您的自定义无法通过其他主题进行恢复。

上述代码中的问题似乎是您正在注册画家,而不仅仅是您的" myLabel"。这是有意的吗?因为这会覆盖默认的单元格画家配置,然后由主题再次覆盖。如果它只应注册" myLabel"设置主题应该没有效果。