当前位置: 首页 > 知识库问答 >
问题:

向可Natting行添加图像和背景

袁良弼
2023-03-14

我很好奇是否有任何简单的方法来添加背景,行颜色和图像使用单独的配置。我不希望像CellPainterWrapper示例那样将它们组合成1个配置,因为我希望分离两者之间的逻辑。我当前的代码既适用于图像,也适用于背景色,但我不能两者都做(最上面的配置会覆盖最下面的配置)。下面是我的片段:

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

共有1个答案

郭云
2023-03-14

从注释来看,真正的问题是如何支持分离的IconfiglabelAcculator。由于每个层只能注册一个IconfiglabelAccumulator,因此有两种方法可以实现这一点:

  1. 在不同的层上注册不同的IconfiglabelAccumulator
  2. 使用AggregateConfiglabelAccumulator,其中可以组合多个IconfiglabelAccumulator

入门教程也对此进行了解释:http://www.vogella.com/tutorials/nattable/article.html

 类似资料:
  • 问题内容: 此处已触及该主题,但未提供有关如何创建3D图并在平面中以指定高度插入图像的指示。 因此,要提出一个简单且可复制的案例,假设我使用以下代码创建了一个3D图: 在视觉上,我们有: 在级别上,这里是避免重叠的视觉偏移, 我想插入一张图像, 表示曲线显示特定值的元素。 怎么做? 在此示例中,我并不关心元素与其值之间的完美匹配,因此请随时上传您喜欢的任何图像。另外,如果对匹配不满意,有没有办法让

  • 问题内容: 我有一个正在编写的CSS页面,我需要在一个类中应用背景图像,然后使用另一个类将一个局部透明的背景图像放在已经存在的背景图像之上。这只是一个简单的字眼,所以让我做一个示范。 在此示例中,第一个div应该具有背景图像1,第二个div应该具有背景图像1,但是滤镜图像位于其顶部,然后第三个div应该是图像2,第四个应该是图像2并且上面具有相同的滤镜。 但是,在此示例中,.backgroundF

  • 我有工作代码将图像插入到DOCX模板中(使用docxtpl提供的Jinja模板格式),但是当图像插入到文档正文时,图像无法在标题中呈现。文档中的插入点显示消息“read error”。

  • 目前我有下面的代码。它将imageview添加到现有的背景中。然而,在图像创建后,当我试图拖动它时,程序崩溃了...有人知道为什么它不起作用吗? 日志如下: ------崩溃开始 E/AndroidRuntime:致命异常:main process:com.example.dan.ball,pid:2795 java.lang.nullpointerException:在Android.view.

  • 问题内容: 这可能吗?以下是我尝试过的方法,但它完全用黑色填充了圆圈。 问题答案: SVG元素的图像填充是通过SVG模式实现的。