7

Vaadin Grid を使用すると、編集可能として定義できます

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

Label は Field ではないため、使用できないと思います。

これを達成するためのより良いオプションはありますか?

編集: aakath が言ったように、列を編集できないようにする方法がありますが、行を編集するとセルの値が消えてしまい、望ましくありません。

4

7 に答える 7

6

setEditable(false)列のメソッドを呼び出してみましたか? アイテムエディタがアクティブなときは、フィールドを編集不可にするべきだと思います。

grid.getColumn("fullName").setEditable(false);
于 2015-06-18T05:04:29.613 に答える
1

grid.setEditorEnabled(true);グリッドを編集可能なものにして、のような他の列の編集オプションを無効にすることで、同じことが達成できると思いますgrid.getColumn(columnName).setEditable(false);。しかし、この方法のデメリットについてはよくわかりません。任意の提案は常に高く評価されます。

于 2016-10-13T11:34:33.927 に答える
1

それを行うためのトリッキーな方法が1つあります!私はちょうどそれを見つけた。したがって、まず、行を直接追加するのではなく、コンテナでグリッドを使用する必要があります。

BeanItemContainer<MyBean> container = new BeanItemContainer<>(MyBean.class);
setContainerDataSource(container);

次に、編集する必要があるフィールドのセッターを除いて、MyBean からフィールド セッターを削除します。

于 2015-06-29T12:44:11.343 に答える
1

その簡単な方法は、Vaadin Documentation に移動するだけで、それから何が行われたかを以下に示します

grid = new Grid<>();
    lst = new ArrayList<>();
    provider = new ListDataProvider<>(lst);
    lst.add(new Company(1, "Java"));
    grid.setDataProvider(provider);
    grid.addColumn(Company::getSerialNo).setCaption("Sr.no");
    TextField tf = new TextField();

    grid.getEditor().setEnabled(true);

    HorizontalLayout hlyt = new HorizontalLayout();
    grid.addColumn(Company::getName).setEditorComponent(tf, Company::setName).setCaption("Name").setExpandRatio(2);

    hlyt.addComponent(grid);
于 2017-09-21T08:00:09.510 に答える
0

次のアプローチを使用して読み取り専用フィールドを取得します。トリックは setEnabled メソッドをオーバーライドして無効なテキストフィールドを取得することです。Vaadin Grid でソース コードをトレースすると、Grid に渡すフィールドに関係なく、常に field.setEnabled(true) が呼び出されます。

myGrid.getColumn(propertyId).setEditorField(new ReadOnlyField());

public class ReadOnlyField extends TextField
{
    public ReadOnlyField()
    {
        super();
        this.setReadOnly(true);
    }

    @Override
    public void setEnabled(boolean enabled)
    {
        // always set to disabled state
        super.setEnabled(false);
    }
}
于 2015-12-15T05:36:05.790 に答える