2017-06-02 1 views
0

ich ein Raster wie diese Vaadin 8 unter Verwendung von definierten einzustellen:Gibt es eine Möglichkeit, eine Zelle in Raster im Bearbeitungsmodus mit Vaadin 8 Raster

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(); 

Der Wert Bean ist nur eine ganz normale Bohne

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

Was ich tun möchte, ist die Schaltfläche hinzufügen, so dass durch Klicken auf diese Schaltfläche eine neue Zeile zum Raster hinzugefügt werden sollte und die einzige Spalte in der neuen Zeile sollte Bearbeitungsmodus eingestellt werden, so dass Benutzer einen neuen Wert direkt schreiben können. Ist es möglich, dies zu tun?

Antwort

1

Öffnen Editor ist programmatisch nicht möglich mit den aktuellen Vaadin 8 APIs. Es gibt 2 Ausgaben um diese Funktion hinzuzufügen derzeit offen:

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

Es gute Idee sein könnte, nicht Value.value in gleich Methode zu verwenden, da dies zu Problemen mit einigen Grid-Funktionen, wie Gitter verursacht. Wählen Sie (T-Element).

Dieser Codeabschnitt ermöglicht dem Benutzer die Verwendung von Pfeil- und Eingabetasten zum Bearbeiten des neuesten Elements.

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

Grid wird den Fokus nicht automatisch erhalten, nachdem der Editor ausgeblendet wurde. Sie müssen Vaadin ein wenig helfen:

gridEditor.addSaveListener((EditorSaveListener<Value>) event -> { 
    gridDataProvider.refreshAll(); 
    grid.focus(); 
}); 
Verwandte Themen