Добавление изображения и фона в строки NatTable

Я прочитал документацию по адресу: https://eclipse.org/nattable/documentation.php?page=styling

Мне любопытно, есть ли простой способ добавить цвета и изображения фоновой строки, используя отдельные конфигурации. Я не хочу объединять их в одну конфигурацию, как в примере с CellPainterWrapper, потому что я хочу разделить логику между ними. Мой текущий код работает либо для изображения, либо для цвета фона, но я не могу сделать и то, и другое (самая верхняя конфигурация переопределяет самую нижнюю). Ниже мой фрагмент:

    void run(){
           addBackgroundRowColors();
           addImageToColumn();
    }

    void addImageToColumn() {
        getNatTable().addConfiguration(new AbstractRegistryConfiguration() {
            @Override
            public void configureRegistry(IConfigRegistry configRegistry) {
                final Style cellStyleOne = new Style();
                cellStyleOne.setAttributeValue(CellStyleAttributes.IMAGE,
                   myIcon);
                configRegistry.registerConfigAttribute(
                   CellConfigAttributes.CELL_STYLE, cellStyleOne,
                   DisplayMode.NORMAL, myIconLabel);

                final Style cellStyleTwo = new Style();
                cellStyleTwo.setAttributeValue(CellStyleAttributes.IMAGE, 
                   myIcon2);
                configRegistry.registerConfigAttribute(
                   CellConfigAttributes.CELL_STYLE, cellStyleTwo,
                   DisplayMode.NORMAL, myIconLabel2);

                configRegistry.registerConfigAttribute(
                   CellConfigAttributes.CELL_PAINTER,
                   new CellPainterDecorator(new TextPainter(), 
                   CellEdgeEnum.LEFT, 10, new ImagePainter()),
                   DisplayMode.NORMAL);
            }
        });
        DataLayer dl = getGlazedListsGridLayer().getBodyDataLayer();
        IConfigLabelAccumulator cellLabelAccumulator = (configLabels, 
          columnPosition, rowPosition) -> {
               // Label code here...
        };

        dl.setConfigLabelAccumulator(cellLabelAccumulator);
    }

    void addBackgroundRowColors() {
        getNatTable().addConfiguration(new AbstractRegistryConfiguration() {
            @Override
            public void configureRegistry(IConfigRegistry configRegistry) {
                Style cellStyleOne = new Style();
                cellStyleOne.setAttributeValue(
                  CellStyleAttributes.BACKGROUND_COLOR, myColorOne);
                configRegistry.registerConfigAttribute(
                  CellConfigAttributes.CELL_STYLE, cellStyleOne,
                  DisplayMode.NORMAL, myColorLabel1);

                Style cellStyleTwo = new Style();
                cellStyleTwo.setAttributeValue(
                  CellStyleAttributes.BACKGROUND_COLOR, cellStyleTwo);
                configRegistry.registerConfigAttribute(
                  CellConfigAttributes.CELL_STYLE, cellStyleTwo,
                  DisplayMode.NORMAL, myColorLabel2);
            }
        });
        DataLayer dl = getGlazedListsGridLayer().getBodyDataLayer();
        IConfigLabelAccumulator cellLabelAccumulator = (configLabels, 
          columnPosition, rowPosition) -> {
               // Label code here...
        };

       dl.setConfigLabelAccumulator(cellLabelAccumulator);
    }

Обновлять

В итоге я сделал что-то похожее на следующее, чтобы заставить его работать:

  AggregateConfigLabelAccumulator aggregate = 
    new AggregateConfigLabelAccumulator();
  aggregate.add(addImageToColumn());
  aggregate.add(addBackgroundRowColors());

  getGlazedListsGridLayer().getBodyDataLayer().
    setConfigLabelAccumulator(aggregate);

person ekjcfn3902039    schedule 10.11.2016    source источник
comment
В чем вопрос? Вы хотите избавиться от единственного CellPainterWrapper в конфигурации? Я не думаю, что это сработает простым способом. Или приведенный выше фрагмент является тем, что вы хотите сделать? С первого взгляда это должно сработать. Вы добавляете обе этикетки в стек этикеток в накопителе этикеток?   -  person Dirk Fauth    schedule 11.11.2016
comment
Мой вопрос: как мне заставить это работать, используя приведенный выше фрагмент кода? Я не хочу смешивать свой код для изображений и цветов фона в один массивный метод. Приведенный выше фрагмент - это то, что я хотел бы сделать. Каждый IConfigLabelAccumulator добавляет в стек свои собственные метки. Другими словами, накопитель меток цвета фона имеет дело только с метками цвета фона. Аккумулятор меток изображений работает только с метками изображений.   -  person ekjcfn3902039    schedule 11.11.2016


Ответы (1)


Из комментариев реальный вопрос о том, как поддерживать разделенные IConfigLabelAccumulator. Поскольку вы можете зарегистрировать только один IConfigLabelAccumulator на слой, это можно сделать двумя способами:

  1. зарегистрируйте разные IConfigLabelAccumulator на разных слоях
  2. Используйте AggregateConfigLabelAccumulator, где вы можете комбинировать несколько IConfigLabelAccumulator

Это также объясняется в руководстве по началу работы: http://www.vogella.com/tutorials/NatTable/article.html

person Dirk Fauth    schedule 11.11.2016
comment
Отлично, AggregateConfigLabelAccumulator отлично сработал! Я обновил исходный вопрос, чтобы другие могли видеть фрагмент кода. - person ekjcfn3902039; 11.11.2016