Button Vaadin 7-将按钮作为generatedProperty添加到网格

Button Vaadin 7-将按钮作为generatedProperty添加到网格,button,grid,icons,vaadin7,renderer,Button,Grid,Icons,Vaadin7,Renderer,我正在用beanItemContainer填充一个网格,我想为每一行中的不同功能和重定向添加几个按钮 到目前为止,我创建了一个BeanItemContainer,并用GeneratedPropertyContainer将其包装如下: private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class); private GeneratedPro

我正在用beanItemContainer填充一个网格,我想为每一行中的不同功能和重定向添加几个按钮

到目前为止,我创建了一个BeanItemContainer,并用GeneratedPropertyContainer将其包装如下:

        private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
        private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
wrapperContainer.addGeneratedProperty("buttons", new PropertyValueGenerator<Button>()
        {

                    @Override
        public Button getValue(Item item, Object itemId, Object propertyId)
        {
            ClickListener fooBarClickListener = new ClickListener()
            {

                @Override
                public void buttonClick(ClickEvent event)
                {
                    // do something
                }
            };

            Button button = new Button(FontAwesome.USER);
            button.addClickListener(fooBarClickListener);
            return button;
        }

        @Override
        public Class<Button> getType()
        {
            return Button.class;
        }
    });
然而,这只是一个按钮,我需要多个按钮,除此之外,它甚至不起作用

它因以下错误而失败

Cannot remove converter, as renderer's presentation type java.lang.String and column's model com.vaadin.ui.Button type aren't directly compatible with each other (in Column[propertyId:buttons])

另外,对于我的用例来说,一个可点击的图标(最好是一个按钮)而不是按钮就足够了。

将生成的属性添加到网格的模式如下

        Grid grid = new Grid();
        ...
        ButtonRenderer buttonRenderer = new ButtonRenderer();
        ... // add click listener etc
        GeneratedPropertyContainer gpc = rowIndex.addGeneratedProperty("button1", container);
        grid.setContainerDataSource(gpc);
        grid.getColumn("button").setRenderer(buttonRenderer);
您将需要一个属性,即每个按钮一列。ButtonRenderer不知道如何在一列中渲染多个按钮

Vaadin目录中有一个附加组件,这是一个更高级的渲染器,专为希望在一列中紧凑地设置按钮的情况而设计,例如操作工具箱

我也非常喜欢这种类型用例的可选UX方法,在这种情况下,您希望在网格行上有一些东西来触发操作,也就是说。每行中的许多按钮会产生视觉混乱,占用原本可用于显示数据的空间,并降低网格渲染速度。因此,值得考虑将这些操作放在上下文菜单中

        Grid grid = new Grid();
        ...
        ButtonRenderer buttonRenderer = new ButtonRenderer();
        ... // add click listener etc
        GeneratedPropertyContainer gpc = rowIndex.addGeneratedProperty("button1", container);
        grid.setContainerDataSource(gpc);
        grid.getColumn("button").setRenderer(buttonRenderer);