首页 > 解决方案 > 如何在 Vaadin 网格列中添加图标?

问题描述

我正在使用 vaadin 8。我需要在某个列的 vaadin 网格上显示图标。如果ID匹配,则需要显示 I 图标。

如果我这样做grid.getColumn("0")。如果我记录它,我会得到null. 我该怎么做 ?

这就是我所拥有的

class Person{
    private int ID;
    private String name;

    public Person(int ID, String name) {
        this.ID = ID;
        this.name = name;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


final VerticalLayout layout = new VerticalLayout();
        Grid<Person> personGrid = new Grid<>();

        List<Person> personList = Arrays.asList(
                new Person(1,"a"),
                new Person(2,"b"),
                new Person(3,"c")
        );


        personGrid.setItems(personList);
        personGrid.addColumn(Person::getID).setCaption("ID");
        personGrid.addColumn(Person::getName).setCaption("name");

        layout.addComponent(personGrid);

标签: javavaadinvaadin8

解决方案


您可以在添加列时使用 ComponentRenderer 在列中显示图标。我喜欢直接使用简写形式grid.addComponentColumn(item -> {return component});

personGrid.addComponentColumn(person -> {
    if(person.getId() == 2){ // use your own matching logic here
        return VaadinIcon.WHATEVER_ICON.create();
    } else {
        return new Span(); // not sure right now if returning null is good idea, so I return Span instead.
    }
).setKey("myIcon"); // set a column key so you can access this column later on using grid.getColumnByKey("myIcon");

编辑:我刚刚意识到您在询问 Vaadin 8。对于 Vaadin 8,它有点不同,因为 VaadinIcons 不是组件。相反,您返回 Icon 字符串。
V8不是我的强项,如果这不起作用我道歉

personGrid.addColumn(person -> {
    if(person.getId() == 2){ // use your own matching logic here
        return VaadinIcons.WHATEVER_ICON.getHtml();
    } else {
        return ""; 
    }, new HtmlRenderer()
).setId("myIcon"); // set column id so you can access the column later on using grid.getColumn("myIcon");

推荐阅读