在 NatTable 单元格中显示图像
Displaying images in NatTable cells
我对在 NatTable 细胞中使用图像有疑问。我的 ConfigLabelAccumulator 和配置看起来像这样
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();
Table 看起来符合预期。我在单元格中看到黄色背景单元格和“+”图像。但在通话后
natTable.setTheme(new ModernNatTableThemeConfiguration());
我只看到黄色背景,没有图像。
更新:
我已经使用 IThemeExtension
解决了这个问题,但可能还有其他解决方案吗?
主题配置旨在覆盖现有样式。这也允许在运行时切换主题。
IThemeExtensions 是使用条件样式扩展现有主题的方法。您当然也可以通过扩展现有的主题来创建自己的主题,但是这样您的定制就无法与其他主题一起使用。
上面代码中的问题似乎是您一般注册画家,而不仅仅是为您的 "myLabel"。这是故意的吗?因为这会覆盖默认的单元格画家配置,然后再次被主题覆盖。如果它应该只注册 "myLabel" 设置主题应该不会有效果。
我对在 NatTable 细胞中使用图像有疑问。我的 ConfigLabelAccumulator 和配置看起来像这样
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();
Table 看起来符合预期。我在单元格中看到黄色背景单元格和“+”图像。但在通话后
natTable.setTheme(new ModernNatTableThemeConfiguration());
我只看到黄色背景,没有图像。
更新:
我已经使用 IThemeExtension
解决了这个问题,但可能还有其他解决方案吗?
主题配置旨在覆盖现有样式。这也允许在运行时切换主题。
IThemeExtensions 是使用条件样式扩展现有主题的方法。您当然也可以通过扩展现有的主题来创建自己的主题,但是这样您的定制就无法与其他主题一起使用。
上面代码中的问题似乎是您一般注册画家,而不仅仅是为您的 "myLabel"。这是故意的吗?因为这会覆盖默认的单元格画家配置,然后再次被主题覆盖。如果它应该只注册 "myLabel" 设置主题应该不会有效果。