首页 > 解决方案 > 使用 Grid Vaadin 在 IndexedContainer 中添加一个按钮

问题描述

目前我已经定义了一个带有许多字符串类型属性的 IndexedContainer。我已将此索引容器添加到 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,否则我将不得不更改许多相关的类(项目如此之大,我们无法分配高昂的维护成本)。

提前致谢。

标签: jakarta-eevaadin7

解决方案


您必须使用 aGeneratedPropertyContainer添加按钮列和 a 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


推荐阅读