2016-11-07 54 views

回答

3

如果你只需要一个只读的复选框,这个工作对我来说:

grid.getColumn("columnId").setRenderer(new HtmlRenderer(), new BooleanConverter()); 

HtmlRenderer由Vaadin框架提供,且布尔转换器看起来是这样的:

public class BooleanConverter implements Converter<String, Boolean> 
{ 
    @Override 
    public Boolean convertToModel(String value, Class<? extends Boolean> targetType, Locale locale) throws ConversionException 
    { 
    return null; 
    } 

    @Override 
    public String convertToPresentation(Boolean value, Class<? extends String> targetType, Locale locale) throws ConversionException 
    { 
    return "<input type='checkbox' disabled='disabled'" + (value.booleanValue() ? " checked" : "") + " />"; 
    } 

    @Override 
    public Class<Boolean> getModelType() 
    { 
    return Boolean.class; 
    } 

    @Override 
    public Class<String> getPresentationType() 
    { 
    return String.class; 
    } 
} 

这会给你是一个本地浏览器复选框,但是,不是一个Vaadin复选框。

+0

谢谢,但我还需要检查和取消选中框 – spaethju

+1

@spaethju下面我把答案满足您的要求。 – Piotrowy

0

您必须添加生成列的复选框

GeneratedPropertyContainer gpcontainer = new GeneratedPropertyContainer(container); 
    gpcontainer.addGeneratedProperty("columnName", 
     new PropertyValueGenerator<CheckBox>() { 
     @Override 
     public CheckBox getValue(Item item, Object itemId, 
           Object propertyId) { 

      // set checkBox listener etc. in here 
      return new CheckBox(); 
     } 

     @Override 
     public Class<CheckBox> getType() { 
      return CheckBox.class; 
     } 
    }); 

Grid grid = new Grid(gpcontainer); 

你可以找到更多详细的例子在这里 “GeneratedPropertyContainer”

https://vaadin.com/docs/-/part/framework/datamodel/datamodel-container.html#datamodel.container.gpc

编辑: 还要设置`ComponentRenderer”为您的列

mainGrid.addColumn(COLUMN).setRenderer(new ComponentRenderer()) 
+0

该解决方案总是显示我com.vaadin .ui.CheckBox @ 4cdcd0e8而不是真正的CheckBox。 – spaethju

+0

我已经更新了我的答案。为你的列设置'ComponentRenderer' –

+1

谢谢,但它是一个附加? Vaadin找不到ComponentRenderer()。 – spaethju

3

我建议使用这个回购https://github.com/vaadin/grid-renderers-collection-addon。该项目由Vaadin开发人员开发,它提供了CheckboxRenderer类。你可以在演示中看到它,但使用它非常简单。

首先,您必须将存储库和依赖项添加到您的项目中。在行家它看起来像这样:

... 
<repositories> 
    ... 
    <repository> 
     <id>vaadin-addons</id> 
     <url>http://maven.vaadin.com/vaadin-addons</url> 
    </repository> 
</repositories> 
... 
<dependencies> 
    ... 
    <dependency> 
     <groupId>com.vaadin</groupId> 
     <artifactId>grid-renderers-collection-addon</artifactId> 
     <version>0.94</version> 
    </dependency> 
</dependencies> 
... 

然后你可以使用它像这样:

grid.getColumn(columnName).setRenderer(new CheckboxRenderer()); 

您还可以轻松添加监听器:

CheckboxRenderer renderer = new CheckboxRenderer(); 
grid.getColumn(columnName).setRenderer(renderer); 
grid.getColumn(columnName).setHeaderCaption(""); 
renderer.addClickListener(e -> System.out.println("Hello listener!")); 
+0

可悲的是,复选框旁边总是有一个标签,不适合我的实施 – spaethju

+0

Imauręyou van ommit this。我可以在以后回家看看。 – Piotrowy

+0

您是否找到解决方案? – spaethju