我在BeanItemContainer
中使用Grid
来显示我的数据。我需要单独为每个单元格着色,具体取决于单元格中的数据。
答案 0 :(得分:7)
Vaadin书中的section about the Grid在生成单元格样式小节中解释了这一点:
您使用
CellStyleGenerator
将setCellStyleGenerator()
设置为网格。getStyle()
方法获取CellReference
,其中包含有关单元格的各种信息和对网格的引用,如果没有生成样式,则应返回样式名称或null
。例如,要将样式名称添加到特定列,您可以匹配列的属性ID,如下所示:
grid.setCellStyleGenerator(cellRef -> // Java 8 "born".equals(cellRef.getPropertyId())? "rightalign" : null);
然后您可以使用CSS规则对单元格进行样式设置,如下所示:
.v-grid-cell.rightalign { text-align: right; }
答案 1 :(得分:1)
还有另一种方法,100%动态,没有样式文件。
grid.addColumn(TemplateRenderer.<MyObj> of("<div style$=\"background-color: [[item.color]];\">[[item.duration]]</div>")
.withProperty("color", MyObj::getDurationColor)
.withProperty("duration", MyObj::getDurationMin)).setHeader("Duration");
在这种情况下,颜色会随着持续时间的增加而变得更加浓烈。
public String getDurationColor() {
long latency = durationMin;
if (latency > 255) latency = 255;
return "#ff" + Long.toHexString(255-latency) + Long.toHexString(255-latency);
}