Checkbox Vaadin表格:如何将布尔值显示为可编辑为false的复选框
我希望在表格中看到复选框,而不是“真”或“假”文本。TableFieldFactory类仅为可编辑单元格生成字段。我发现只有formatProperty可以像这样返回正确的unicode字符☑, 但是看起来不太好。有没有可能在不创建计算属性的情况下生成自己的HTML元素?一种解决方案是向表中添加样式生成器,并通过css解决此问题:Checkbox Vaadin表格:如何将布尔值显示为可编辑为false的复选框,checkbox,boolean,vaadin,Checkbox,Boolean,Vaadin,我希望在表格中看到复选框,而不是“真”或“假”文本。TableFieldFactory类仅为可编辑单元格生成字段。我发现只有formatProperty可以像这样返回正确的unicode字符☑, 但是看起来不太好。有没有可能在不创建计算属性的情况下生成自己的HTML元素?一种解决方案是向表中添加样式生成器,并通过css解决此问题: setCellStyleGenerator(new CellStyleGenerator() { @Override
setCellStyleGenerator(new CellStyleGenerator() {
@Override
public String getStyle(Table source, Object itemId, Object propertyId) {
if("myBooleanColumn".equals(propertyId){
return "true".equals(itemId) ? "checked-checkbox":"unchecked-checkbox";
}
return null;
}
});
然后定义你的风格:
.v-table-cell-content-unchecked-checkbox .v-table-cell-wrapper,
.v-table-cell-content-checked-checkbox .v-table-cell-wrapper{
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
}
.v-table-cell-content-checked-checkbox .v-table-cell-wrapper{
background-image: url(".../checked-checkbox.png");
}
.v-table-cell-content-unchecked-checkbox .v-table-cell-wrapper{
background-image: url(".../unchecked-checkbox.png");
}
如果希望复选框可编辑,还可以在列中设置real Vaadin复选框。有关详细信息,请参见。生成的列方法将默认的“toString”替换为一个组件:
table.addGeneratedColumn("propertyWithBoolean", new Table.ColumnGenerator() {
@Override
public Object generateCell(Table source, Object itemId,
Object columnId) {
Boolean checked = (Boolean) source.getItem(itemId).getItemProperty(columnId).getValue();
CheckBox checkBox = new CheckBox();
checkBox.setValue(checked);
// don't allow user to change value
checkBox.setEnabled(false);
return checkBox;
}
});
作为mstahv answer的补充,刷新复选框字段的方法是使用table.refreshRowCache()
或者你可以使用真正的复选框,只需禁用它是的,这是设计师喜欢的。事实上,你也可以改变禁用复选框的样式。我发现它很有用,有趣的是使用文本缩进替换原始文本:)你的是wekcome。我认为这对varios场景很有用,对状态图标也很有用。这是我不想遵循的方式。为每个布尔列创建计算(生成)属性,然后使其可见并隐藏原始属性。这是非常苛刻的,有缺点,内容不是自动刷新的价值变化。我需要由其他侦听器处理。@Hink“内容不是由valueChange自动刷新的”。。。您可以将ItemProperty绑定到CheckBox@Hink,我不知道您所说的“要求”是什么意思,但如果您对生成的列使用与原始列相同的属性id,它将被替换。无需添加其他属性并隐藏原始属性。正如Nexus所说,如果您绑定到该属性,并且在其他地方实际修改了相同的属性,则将自动更新。这在现实世界的解决方案中非常罕见,所以当您知道数据已经更改时,我只需重置整个表内容(或特定的复选框)。
table.addGeneratedColumn("propertyWithBoolean", new Table.ColumnGenerator() {
@Override
public Object generateCell(Table source, Object itemId,
Object columnId) {
Boolean checked = (Boolean) source.getItem(itemId).getItemProperty(columnId).getValue();
CheckBox checkBox = new CheckBox();
checkBox.setValue(checked);
// don't allow user to change value
checkBox.setEnabled(false);
return checkBox;
}
});
void changeColumnValue(String field, String dato)
{
item.getItemProperty(field).setValue(dato.equals("true"));
table.refreshRowCache(); // To refresh the checkbox value in the table
}