如何在Vaadin网格列中添加图标?

时间:2019-07-14 14:47:36

标签: java vaadin vaadin8

我正在使用vaadin8。我需要在我的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);

1 个答案:

答案 0 :(得分:2)

添加列时,可以使用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");

编辑:我刚刚意识到您是在询问Vaadin8。对于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");