2

の列にスタイル クラスを割り当てたいと思いますGrid。このColumnクラスはaddStyleName、他の Vaadin コンポーネントが提供するメソッドを提供しません。それを行う方法はありますか?

4

1 に答える 1

2

グリッドにはCellStyleGeneratorまたはのみを設定できます。RowStyleGenerator列のクラスを設定するには、次のようにする必要があります。

grid.setCellStyleGenerator(new CellStyleGenerator() {
    @Override
    public String getStyle(CellReference cell) {
        if ("myProperty".equals(cell.getPropertyId()))
            return "my-style";
        else
            return null;
    }
});

CellStyleGeneratorsingleには singleのみが存在できますGrid。多くの場合、グリッドを構成する複雑なコードがあり、列ごとに構成します。これを可能にするこのユーティリティ クラスを使用します (Java8 が必要です)。

/**
 * A {@link CellStyleGenerator}, that enables you to set <code>CellStyleGenerator</code>
 *  independently for each column. It also has a shorthand method to set a fixed style 
 *  class for a column, which Vaadin currently does not allow to (as of Vaadin 7.6).
 *
 * For more information, see http://stackoverflow.com/a/36398300/952135
 * @author http://stackoverflow.com/users/952135
 */
public class EasyCellStyleGenerator implements CellStyleGenerator {

    private Map<Object, List<CellStyleGenerator>> generators;

    @Override
    public String getStyle(CellReference cellReference) {
        if (generators != null) {
            List<CellStyleGenerator> gens = generators.get(cellReference.getPropertyId());
            if (gens != null)
                return gens.stream()
                        .map(gen -> gen.getStyle(cellReference))
                        .filter(s -> s != null)
                        .collect(Collectors.joining(" "));
        }
        return null;
    }

    /**
     * Adds a generator for a column. Allows generating different style for each cell, 
     * but is called only for the given column.
     */
    public void addColumnCellStyleGenerator(Object propertyId, 
            CellStyleGenerator generator) {
        if (generators == null) // lazy init of map
            generators = new HashMap<>();
        generators.computeIfAbsent(propertyId, k->new ArrayList<>()).add(generator);
    }

    /**
     * Sets a fixed style class(es), that will be used for all cells of this column.
     */
    public void addColumnFixedStyle(Object propertyId, String styleClasses) {
        addColumnCellStyleGenerator(propertyId, cellReference -> styleClasses);
    }

}
于 2016-04-04T08:55:56.823 に答える