Java 如何根据行对象条件NatTable为行标题单元格设置标签

Java 如何根据行对象条件NatTable为行标题单元格设置标签,java,nattable,Java,Nattable,如果用户更改了数据,我希望能够在该行的行标题单元格中标记一个指示 我尝试了一些事情,但没有成功 我知道我应该为单元格设置一个标签,然后用图标装饰单元格 我只是不知道如何将基于行对象的标签设置为行标题单元格。请帮忙 natTable.addConfiguration(新的AbstractRegistryConfiguration(){ @凌驾 公共无效配置注册表(IConfigRegistry configRegistry){ configRegistry.registerConfigAttrib

如果用户更改了数据,我希望能够在该行的行标题单元格中标记一个指示

我尝试了一些事情,但没有成功

我知道我应该为单元格设置一个标签,然后用图标装饰单元格

我只是不知道如何将基于行对象的标签设置为行标题单元格。请帮忙

natTable.addConfiguration(新的AbstractRegistryConfiguration(){
@凌驾
公共无效配置注册表(IConfigRegistry configRegistry){
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL\u),
新的CellPainterDecorator(新的ImagePainter(){
@凌驾
受保护的映像getImage(ILayerCell单元格,IConfigRegistry配置注册表){
Person obj=bodyLayerStack.getFilterList().get(cell.getRowIndex());
if(对象isDirty(){
返回脏图像;
}否则{
返回null;
}
}
},CellEdgeEnum.LEFT,new textpainer()),DisplayMode.NORMAL,DIRTY\u CELL\u LABEL);
}
});
如何将此“脏单元格\标签”标签设置为特定行(不是所有行)的行标题单元格


我不知道如何适应我在
CellOverrideLabelAccumulator

中的条件,您需要实现一个自定义
IConfigLabelAccumulator
,如我们的文档或入门教程中所述,甚至在stackoverflow上的一些帖子中,如果您搜索它,例如

对于懒惰的人,这里有一些代码可以很容易地添加到NatTable示例中。它使用已婚属性,而不是NatTable示例中不可用的脏属性:

  • IColumnLabelAccumulator
    注册到行标题层

    RowHeaderLayer rowHeaderLayer =
        new RowHeaderLayer(rowHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
    
    rowHeaderLayer.setConfigLabelAccumulator(new IConfigLabelAccumulator() {
    
        @Override
        public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) {
            Person person = bodyLayer.getBodyDataProvider().getRowObject(rowPosition);
            if (person.isMarried()) {
                configLabels.addLabel("MARRIED");
            }
        }
    });
    
  • 注册样式

    natTable.addConfiguration(new AbstractRegistryConfiguration() {
    
        @Override
        public void configureRegistry(IConfigRegistry configRegistry) {
            configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER,
                    new CellPainterDecorator(
                            new TextPainter(),
                            CellEdgeEnum.LEFT,
                            new ImagePainter() {
                                @Override
                                protected Image getImage(ILayerCell cell, IConfigRegistry configRegistry) {
                                    return image;
                                }
    
                            }),
                    DisplayMode.NORMAL,
                    "MARRIED");
        }
    });
    

  • 请注意,
    ImagePainter
    中不需要额外的检查,因为标签仅应用于具有该状态的单元格。

    我尝试了以下操作,但在表中所有列的单元格(而不是标题单元格)中设置了一个图标IConfigLabelAccumulator cellLabelAccumulator=new IConfigLabelAccumulator(){@Override public void acgregateConfiglabels(LabelStack configLabels,int columnPosition,int rowPosition){Person=bodyLayerStack.getBodyDataProvider().getRowObject(rowPosition);if(Person.isDirty()){configLabels.addLabel(DIRTY_CELL_LABEL);}};您需要在行标题层上注册它。我不知道如何注册?就像在身体区域上注册一样。或者现在如何注册?