Добавление изображения и фона в строки 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);
1 ответ
Из комментариев реальный вопрос о том, как поддержать разделенные IConfigLabelAccumulator
, Поскольку вы можете зарегистрировать только один IConfigLabelAccumulator
Для каждого слоя есть два способа добиться этого:
- зарегистрировать разные
IConfigLabelAccumulator
на разных слоях - Используйте
AggregateConfigLabelAccumulator
где вы можете объединить несколькоIConfigLabelAccumulator
Это также объясняется в руководстве по началу работы: http://www.vogella.com/tutorials/NatTable/article.html