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);}};您需要在行标题层上注册它。我不知道如何注册?就像在身体区域上注册一样。或者现在如何注册?