java - 如何在Vaadin网格中只编辑一些列?

原文 标签 java vaadin vaadin7 vaadin-grid

vaadin网格允许定义为可编辑

grid.setEditorEnabled(true);

这使得所有可见列都可以编辑。不过,我不希望用户编辑特定的列,但似乎可编辑的是“全部”或“无”。
我找到的下一个最佳解决方案是使用禁用的编辑器定义编辑器字段,这几乎可以做到,但用户仍然可以选择文本并移动光标(但该字段不再是可编辑的)。
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;
}

我相信标签不能用,因为它不是一个字段。
有没有更好的选择来实现这个目标?
编辑:正如aakath所说,有一种方法可以实现这一点,即不允许编辑列,但这样做时,当您编辑行时,单元格值将消失,这是不可取的。

最佳答案

我的解决方案如下。我刚做完。它没有经过太多的测试。但它可能会给你一些想法。
ATI

  getColumn(columnName).setEditable(true).setEditorField(getNoEditableField(columnName));


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;
}

相关文章:

java - Spring Data Elasticsearch仅返回完全匹配

java - 如何为带有图像结果的动作定义注释?

java - Vaadin Spring范围内的对象:是否可以在不启动servlet容器的情况下创建Vaadin单元测试?

vaadin - 如何在Vaadin表中显示java.util.Properties对象的列表?哪个容器可以直接帮助而不循环?

java - Vaadin 7快捷方式侦听器

java - dataSnapshot.getChildren()获取userID但不获取值

java - Spring Tool Suite的Spring Boot 2和JDK 10构建错误

java - 如何为Vaadin应用程序记录/捕获语音/视频

java - 哪个UI组件可以包含静态html文件?

css - 在Spring Boot Vaadin应用程序中使用多个主题