如何根据行 object 条件 NatTable 为行 header 单元格设置标签
How to set a label to row header cell based on row object condition NatTable
如果用户对数据进行了更改,我希望能够在该行的 header 单元格中标记一个指示。
我尝试了一些但没有成功。
我知道我应该给单元格设置标签,然后用图标装饰单元格。
我只是不知道如何将基于第 object 行的标签设置到第 header 行单元格。请帮忙。
natTable.addConfiguration(new AbstractRegistryConfiguration() {
@Override
public void configureRegistry(IConfigRegistry configRegistry) {
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER,
new CellPainterDecorator(new ImagePainter() {
@Override
protected Image getImage(ILayerCell cell, IConfigRegistry configRegistry) {
Person obj = bodyLayerStack.getFilterList().get(cell.getRowIndex());
if (obj.isDirty() {
return dirtyImage;
} else {
return null;
}
}
}, CellEdgeEnum.LEFT, new TextPainter()), DisplayMode.NORMAL, DIRTY_CELL_LABEL);
}
});
如何将此 "DIRTY_CELL_LABEL" 标签设置为特定行(不是所有行)的行 header 单元格。
我不知道如何在 CellOverrideLabelAccumulator
中满足我的条件。
您需要按照我们的文档 https://www.eclipse.org/nattable/documentation.php?page=styling or the Getting started tutorial https://www.vogella.com/tutorials/NatTable/article.html or even in some posts here on Whosebug if you search for it, e.g. Adding colors to row in nattable based on condition
中的说明实施自定义 IConfigLabelAccumulator
对于懒惰的人,这里有一些可以轻松添加到 NatTable 示例中的代码。它适用于 married 属性 而不是 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
中进行额外检查,因为标签仅应用于具有该状态的单元格。
如果用户对数据进行了更改,我希望能够在该行的 header 单元格中标记一个指示。
我尝试了一些但没有成功。
我知道我应该给单元格设置标签,然后用图标装饰单元格。
我只是不知道如何将基于第 object 行的标签设置到第 header 行单元格。请帮忙。
natTable.addConfiguration(new AbstractRegistryConfiguration() {
@Override
public void configureRegistry(IConfigRegistry configRegistry) {
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER,
new CellPainterDecorator(new ImagePainter() {
@Override
protected Image getImage(ILayerCell cell, IConfigRegistry configRegistry) {
Person obj = bodyLayerStack.getFilterList().get(cell.getRowIndex());
if (obj.isDirty() {
return dirtyImage;
} else {
return null;
}
}
}, CellEdgeEnum.LEFT, new TextPainter()), DisplayMode.NORMAL, DIRTY_CELL_LABEL);
}
});
如何将此 "DIRTY_CELL_LABEL" 标签设置为特定行(不是所有行)的行 header 单元格。
我不知道如何在 CellOverrideLabelAccumulator
中满足我的条件。
您需要按照我们的文档 https://www.eclipse.org/nattable/documentation.php?page=styling or the Getting started tutorial https://www.vogella.com/tutorials/NatTable/article.html or even in some posts here on Whosebug if you search for it, e.g. Adding colors to row in nattable based on condition
中的说明实施自定义IConfigLabelAccumulator
对于懒惰的人,这里有一些可以轻松添加到 NatTable 示例中的代码。它适用于 married 属性 而不是 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
中进行额外检查,因为标签仅应用于具有该状态的单元格。