当前,我已经定义了一个IndexedContainer,它具有许多String类型的属性。我已将此索引容器添加到Vaadin 7网格中,并且工作正常。
现在,我想使我的一列可点击。为此,我创建了以下代码(实际上是代码的一小部分):
modifyReportButton = new Button();
modifyReportButton.setIcon(IconUtil.MODIFY_16PX_ICON.getIcon());
modifyReportButton.setDescription("Modifier");
modifyReportButton.setStyleName(Runo.BUTTON_LINK);
modifyReportButton.setWidth("30px");//ticket7021
modifyReportButton.addListener(modifyReportFromExplorerClick);
modifyReportButton.addClickListener(modifyReportFromExplorerClick);
modifyReportButton.setData(lightReport);
item.getItemProperty("modify").setValue(modifyReportButton);
问题是该按钮根本没有显示在网格中。这是快照:
实际上,我必须这样做。我的意思是我必须在网格内使用IndexedContainer,否则我将不得不更改许多相关的类(项目是如此之大,我们无法为维护分配高昂的成本)。
谢谢。
答案 0 :(得分:0)
您必须使用GeneratedPropertyContainer
添加按钮列和ButtonRenderer
。
// Generate button caption column
GeneratedPropertyContainer gpc = new GeneratedPropertyContainer(yourIndexedContainer);
gpc.addGeneratedProperty("modify", new PropertyValueGenerator<String>() {
@Override
public String getValue(Item item, Object itemId, Object propertyId) {
return "Modify Report";
}
@Override
public Class<String> getType() {
return String.class;
}
});
grid.setContainerDataSource(gpc);
grid.getColumn("modify").setRenderer(new ButtonRenderer(modifyReportFromExplorerClick()));
网格组件文档https://vaadin.com/docs/v7/framework/components/components-grid.html中的更多信息