2017-06-02 21 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(); 
}); 
相關問題