Yam*_*eku 7 java vaadin vaadin7 vaadin-grid
Vaadin Grid允许定义为可编辑
grid.setEditorEnabled(true);
Run Code Online (Sandbox Code Playgroud)
这使得所有可见列都可以编辑.但是,我不希望用户编辑特定列,但似乎可编辑是全部或全部.
我发现的下一个最佳解决方案是使用禁用的编辑器定义编辑器字段,这几乎可以解决问题,但用户仍然可以选择文本并移动光标(但该字段不再可编辑).
Grid.Column nameColumn = grid.getColumn("fullName");
nameColumn.setHeaderCaption("Full Name");
nameColumn.setEditorField(getNoEditableTextField());
...
private Field<?> getNoEditableTextField() {
TextField noEditableTextFiled = new TextField();
noEditableTextFiled.setEnabled(false);
return noEditableTextFiled;
}
Run Code Online (Sandbox Code Playgroud)
我相信Label不能用,因为它不是Field.
有没有更好的选择来实现这一目标?
编辑:正如aakath所说,有一种方法可以实现这一点,不能编辑列,但这样做时,单元格值会在编辑行时消失,这是不可取的.
您是否尝试setEditable(false)在列上调用方法?我相信当项目编辑器处于活动状态时,它应该使该字段不可编辑.
grid.getColumn("fullName").setEditable(false);
Run Code Online (Sandbox Code Playgroud)
我的解决方案如下。我刚刚完成。它没有经过太多测试。但它可能会给你一些想法。
阿蒂
getColumn(columnName).setEditable(true).setEditorField(getNoEditableField(columnName));
Run Code Online (Sandbox Code Playgroud)
...
private Field<?> getNoEditableField(final String columnName) {
CustomField<Label> result = new CustomField() {
@Override
protected Component getContent() {
Label result = (Label) super.getContent();
Object editedItemId = getEditedItemId();
String value = DEFAULT_VALUE;
if (editedItemId != null) {
value = CustomizableGrid.this.toString(getContainerDataSource().getItem(editedItemId).getItemProperty(columnName).getValue());
}
result.setValue(value);
return result;
}
@Override
protected Component initContent() {
Label result = new Label(DEFAULT_VALUE, ContentMode.HTML);
result.setDescription(getColumnDescription(columnName));
result.setStyleName("immutablegridcellstyle");
return result;
}
@Override
public Class getType() {
return Label.class;
}
};
result.setConverter(new Converter<Label, Object>() {
//converter for your data
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8862 次 |
| 最近记录: |