Если вы ищете Vaadin directory, вы найдете несколько расширений, таких как ComponentRenderer add-on, которые позволяют вам иметь такие функции несколько безболезненным способом. Ниже вы можете увидеть образец кода на основе Vaadin v7.7.3 и v1.0.2 вышеупомянутого дополнения. Не забудьте обновить и перекомпилировать свой виджетов.
public class GridWithMultiComponentRenderer extends VerticalLayout {
private static final String BUTTONS_ID = "buttons";
public GridWithMultiComponentRenderer() {
// basic grid setup
Grid grid = new Grid(new BeanItemContainer<>(Person.class));
grid.setSizeFull();
addComponent(grid);
// add the decorator
ComponentGridDecorator<Person> gridDecorator = new ComponentGridDecorator<>(grid, Person.class);
// generate the column which will display the components
gridDecorator.addComponentColumn(BUTTONS_ID, person -> new HorizontalLayout(
new Button("Get name", event -> Notification.show(person.getName())),
new Button("Get surname", event -> Notification.show(person.getSurname())),
new Button("Get age", event -> Notification.show(String.valueOf(person.getAge())))
));
// set column order
grid.setColumns("name", "surname", "age", BUTTONS_ID);
// add some dummy data
Random random = new Random();
for (int i = 0; i < 10; i++) {
gridDecorator.add(new Person("Name " + i, "Surname " + i, random.nextInt(99) + 1));
}
}
// POJO for simple binding
public static class Person {
private String name;
private String surname;
private int age;
public Person(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
Результат:
Спасибо за помощь. Я мог бы реализовать свое требование с помощью дополнения ComponentRenderer. Он работает отлично. – Debasish
@Debasish не проблема, рад, что я мог бы помочь. Обычно на StackOverflow, общий способ поблагодарить кого-то за ответ или комментарий, является его голосованием, если это было полезно, или выберите его как правильный ответ (щелкните зеленый символ 'v' перед номером голосования), который даст некоторые очки репутации тому, кто ответил. С другой стороны, если в ответе нет содержательной информации по этому вопросу, вы можете выбрать его проголосовать. Эти действия помогут другим пользователям, у которых есть аналогичный вопрос/вопрос, быстро определить соответствующую информацию (http://stackoverflow.com/tour). ура – Morfic