2017-06-02 8 views
0

Vaadin 8グリッドを編集モードでグリッド内のセルを設定する方法はあります。この使用Vaadin 8:私のようなグリッドを定義している

ListDataProvider<Value> gridDataProvider = 
     new ListDataProvider<>(new ArrayList<>()); 
     GridSelectionModel<Value> selectionModel; 
     Grid<Value> grid = new Grid<>(Value.class); 
     TextField editorField = new TextField(); 
     editorField.setSizeFull(); 
     Binder<Value> binder = new Binder<>(); 
     binder.bind(editorField, Value::getValue, Value::setValue); 
     Editor<Value> gridEditor = grid.getEditor(); 
     gridEditor.setBinder(binder); 
     gridEditor.addSaveListener((EditorSaveListener<Value>) event -> { 

      gridDataProvider.refreshAll(); 
     }); 
     gridEditor.setEnabled(true); 
     grid.addColumn(Value::getValue).setEditorComponent(editorField, Value::setValue); 
     grid.removeHeaderRow(0); 
     selectionModel = grid.setSelectionMode(Grid.SelectionMode.MULTI); 
     grid.setDataProvider(gridDataProvider); 
     grid.setSizeFull(); 

値豆は普通の豆である

private class Value { 
     private String value; 

     Value(String value) { 
      this.value = value; 
     } 

     String getValue() { 
      return value; 
     } 

     void setValue(String value) { 
      this.value = value; 
     } 

     @Override public boolean equals(Object o) { 
      if (this == o) 
       return true; 
      if (o == null || getClass() != o.getClass()) 
       return false; 
      Value value1 = (Value) o; 
      return Objects.equals(value, value1.value); 
     } 

ボタンを追加すると、そのボタンをクリックすると新しい行がグリッドに追加され、新しい行の唯一の列が編集モードに設定され、ユーザーは新しい値を直接書き込むことができます。 これは可能ですか?

答えて

1

現在のVaadin 8 APIでは、エディタをプログラムで開くことはできません。現在開いているこの機能を追加するための2つの問題があります。

https://github.com/vaadin/framework/issues/8477
https://github.com/vaadin/framework/issues/8820

これは、グリッドのようないくつかのグリッド機能で問題が発生しますので、equalsメソッドでValue.valueを使用しないのは良い考えかもしれません。 (Tアイテム)を選択します。

このコードを使用すると、矢印キーと入力キーを使用して最新のアイテムを編集できます。

private void onButtonClick(Button.ClickEvent clickEvent) { 
    Value newValue = new Value("New value"); 
    list.add(newValue); 
    grid.getDataProvider().refreshAll(); 
    grid.focus(); 
} 

エディタが非表示になっても、グリッドは自動的にフォーカスを受け取りません。 Vaadinを少し助ける必要があります:

gridEditor.addSaveListener((EditorSaveListener<Value>) event -> { 
    gridDataProvider.refreshAll(); 
    grid.focus(); 
}); 
関連する問題