我正在使用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);
答案 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");