在Grid(Vaadin)中更改单元格的颜色

时间:2015-09-29 12:18:15

标签: vaadin

我在BeanItemContainer中使用Grid来显示我的数据。我需要单独为每个单元格着色,具体取决于单元格中的数据。

2 个答案:

答案 0 :(得分:7)

Vaadin书中的section about the Grid生成单元格样式小节中解释了这一点:

  

您使用CellStyleGeneratorsetCellStyleGenerator()设置为网格。 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);
}