2017-10-06 2 views
2

Ich möchte ein Vaadin 8-Gitter erstellen, in dem ich den Wert in der Spalte Amount (2) mit einem Schieberegler bearbeiten kann (analog zu this example).Warum funktioniert mein Slider-Editor in Vaadin 8 Grid nicht?

Grid

Ich verwende den folgenden Code, um das Raster zu erstellen.

fun createGrid(): Grid<Concept> { 
    val grid = Grid<Concept>() 
    val dataProvider = ListDataProvider<Concept>(ctl.getConcepts()) 
    grid.dataProvider = dataProvider 
    grid.addColumn(Concept::getName) 
      .setId("ID") 
      .setCaption("ID") 
    grid.addColumn(Concept::getDescription) 
      .setId("desc") 
      .setCaption("Description") 
    grid.addColumn(Concept::getOutput) 
      .setId("amountNumber") 
      .setCaption("Amount") 

    val conceptAmountditor = Slider() 
    conceptAmountditor.setWidth(100.0f, Sizeable.Unit.PERCENTAGE) 
    conceptAmountditor.min = 0.0 
    conceptAmountditor.max = 100.0 

    grid.addColumn(Concept::getOutput, ProgressBarRenderer()) 
      .setId("amountBar") 
      .setCaption("Amount (2)") 
      .setEditorComponent(
        conceptAmountditor, 
        Concept::setOutput 
      ) 
      .setEditable(true) 


    grid.setSizeFull() 
    return grid 
} 

Aber wenn ich auf die einzelnen Zeilen klicke, erscheint kein Slider.

Was mit meinem Code falsch? Wie kann ich den Fortschrittsbalken in einen Schieberegler verwandeln, wenn ich auf eine bestimmte Zeile doppelklicke?

Antwort

1

Dies funktioniert:

val amount2Col = grid.addColumn(Concept::getOutput, amount2ColRenderer) 
      .setId("amountBar") 
      .setCaption("Amount (2)") 
    val binder = grid.editor.binder 
    val amount2ColSlider = Slider() 
    val amount2Binding: Binder.Binding<Concept, Double> = binder.bind(
      amount2ColSlider, Concept::getOutput, Concept::setOutput 
    ) 
    amount2Col.setEditorBinding(amount2Binding) 
    amount2Col.setEditable(true) 
    grid.editor.setEnabled(true) 

Einzelheiten Abschnitt "Bearbeiten Elemente innerhalb Grid" auf this page sehen.