Добрый день,
Могу предложить вам использование Table.StyleProvider
и динамически инжектируемого CSS.
Добавим StyleProvider
для таблицы, который возвращает имя стиля CSS для цвета, определенного в сущности:
@Install(to = "clientsTable", subject = "styleProvider")
private String clientsTableStyleProvider(Client entity, String property) {
if ("color".equals(property) && entity.getColor() != null) {
return "colored-cell-" + entity.getColor();
}
return null;
}
Эти CSS классы colored-cell-
будут инжектироваться на лету:
protected void injectColorCss(String color) {
Page.Styles styles = Page.getCurrent().getStyles();
styles.add(String.format(
".colored-cell-%s { background-color: #%s; }",
color, color));
}
Мы можем применить цвет при изменении значения компонента ColorPicker
:
@Subscribe("colorPicker")
public void onColorPickerValueChange(HasValue.ValueChangeEvent<String> event) {
Client client = clientsTable.getSingleSelected();
if (client != null) {
client.setColor((String) event.getValue());
injectColorCss((String) event.getValue());
clientsTable.repaint();
}
}
Я создала небольшой проект, где вы можете увидеть этот подход в действии. prjforumtablestyle.zip (78.0 КБ)
С уважением,
Мария