使用Grid Vaadin在IndexedContainer中添加按钮

时间:2019-01-31 15:37:30

标签: java-ee vaadin7

当前,我已经定义了一个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);

问题是该按钮根本没有显示在网格中。这是快照:

Grid with Button problem

实际上,我必须这样做。我的意思是我必须在网格内使用IndexedContainer,否则我将不得不更改许多相关的类(项目是如此之大,我们无法为维护分配高昂的成本)。

谢谢。

1 个答案:

答案 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中的更多信息