如何在Vaadin视图中的网格/表格中设置单元格背景颜色?

时间:2018-01-12 14:43:54

标签: java gridview grid vaadin

我正在使用Vaadin并且我想将backgroung颜色设置为我的网格/表格中的特定单元格,或者如果没有可能将背景颜色设置为特定单元格我想至少将字体颜色设置为特定单元格网格/表。我有网格/表格的代码TableView如下:

package com.trading.scraper;

import com.vaadin.navigator.View;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Grid;
import com.vaadin.ui.VerticalLayout;

import java.util.Arrays;
import java.util.List;

class TableView extends CustomComponent implements View {

    static final String NAME = "Stock table";

    TableView() {
        final VerticalLayout layout = new VerticalLayout();

        List<Stock> people = Arrays.asList(
                new Stock("1", "2", "1"),
                new Stock("3", "5", "2"),
                new Stock("1", "3", "4"));

        Grid<Stock> grid = new Grid<>();
        grid.setWidth(100, Unit.PERCENTAGE);
        grid.setItems(people);
        grid.addColumn(Stock::getValue1).setCaption("Value1");
        grid.addColumn(Stock::getValue2).setCaption("Value2");
        grid.addColumn(Stock::getValue3).setCaption("Value3");

        layout.addComponents(grid);
        setCompositionRoot(layout);
    }
}

grid / table的内容类是:

package com.trading.scraper;

public class Stock {

    private String value1;
    private String value2;
    private String value3;

    public String getValue1() {
        return value1;
    }

    public void setValue1(String value1) {
        this.value1 = value1;
    }

    public String getValue2() {
        return value2;
    }

    public void setValue2(String value2) {
        this.value2 = value2;
    }

    public String getValue3() {
        return value3;
    }

    public void setValue3(String value3) {
        this.value3 = value3;
    }

    public Stock() {
    }

    Stock(String value1, String value2, String value3) {
        this.value1 = value1;
        this.value2 = value2;
        this.value3 = value3;
    }
}

如果可以将背景颜色设置为特定单元格或至少设置字体颜色,并且您知道如何操作,请写入。例如。网格/表格中的单元格值是&#34; 1&#34;我想把它变成红色,但是如果小区的价值是&#34; 5&#34;我想把它变成绿色,如果单元格的值是&#34; 3&#34;我想让它成为黄色。非常感谢你。

1 个答案:

答案 0 :(得分:2)

您可以通过两种方式为Vaadin中Grid的内容设置样式。

首先,要设置行的样式,您可以执行以下操作:

grid.setStyleGenerator(stockRow -> 
  "1".equals(stockRow.getValue1()) ? "highlighted" : null);

如果条件适用,css类highlighted将添加到每个网格行。然后,您可以使用以下选择器在SCSS中设置行的样式:

.v-grid-row.highlighted {
  color: red;
}

要选择单元格并设置样式,您需要选择td:

.v-treegrid-row.highlighted > td {
  color: red;
}

我想你想直接设置单元格的样式,所以在每列模式下设置样式生成器会更合适,如下例所示:

grid
  .addColumn(Stock::getValue1)
  .setCaption("Value1")
  .setStyleGenerator(stockRow -> {
    switch (stockRow.getValue1()) {
      case "1": return "red";
      case "3": return "yellow";
      case "5": return "green";
      default: return null;
    }
  });

然后,您可以在SCSS中设置单元格的样式:

.v-grid-cell.red {
  color: red;
}