2

我想将样式类分配给Grid. 该类Column不提供addStyleName其他 Vaadin 组件提供的方法。有没有办法做到这一点?

4

1 回答 1

2

您只能为网格设置CellStyleGeneratorRowStyleGenerator。要为列设置类,您必须这样做:

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

只能有 single CellStyleGeneratorfor 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 回答