Отображение изображений в ячейках NatTable

У меня есть вопрос относительно использования изображений в ячейках 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();   

Таблица выглядит ожидаемо. Я вижу желтые фоновые ячейки и изображение «+» в ячейках. Но после звонка

natTable.setTheme(new ModernNatTableThemeConfiguration());

Я вижу только желтый фон и никакого изображения.

UPD: Я решил это с помощью IThemeExtension, но может быть есть другое решение?


person Joel    schedule 14.01.2016    source источник
comment
Вы проверили, заменяет ли ModernNatTableThemConfiguration файл конфигурации configureRegistry MyStyleConfiguration? может быть, вы хотите сначала установить тему, а затем добавить свою конфигурацию nattable.addConfiguration(new MyStyleConfiguration());   -  person SomeDude    schedule 14.01.2016
comment
@svasa Насколько я знаю, setTheme() следует вызывать после configure(), поэтому, если я вызову addConfiguration() после setTheme(), не будет никакого эффекта   -  person Joel    schedule 14.01.2016
comment
ModernNattablethemeconfiguration на самом деле имеет свои собственные рисовальщики изображений, если вы посмотрите на нее, то, если вы настроите ее, она заменит вашу предыдущую конфигурацию mystyle, насколько я знаю. Или настроить современную конфигурацию.   -  person SomeDude    schedule 14.01.2016


Ответы (1)


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

IThemeExtensions — это способ расширить существующую тему с помощью условных стилей. Конечно, вы также можете создать свою собственную тему, расширив существующую, но таким образом ваша настройка не будет повторяться с другими темами.

Проблема в приведенном выше коде, по-видимому, заключается в том, что вы регистрируете рисовальщик в целом, а не только для своего «myLabel». Это предназначено? Потому что это переопределяет конфигурацию средства рисования ячеек по умолчанию, которая затем снова переопределяется темой. Если он должен быть зарегистрирован только для настройки «myLabel», тема не должна иметь эффекта.

person Dirk Fauth    schedule 14.01.2016
comment
Большое спасибо, еще раз! Я действительно пропустил myLabel для художника - person Joel; 15.01.2016