2016-07-17 22 views
0

hinzugefügt Ich bin relativ neu in JavaFx und ich brauche Hilfe, um eine Vbox zu wachsen, wie Knoten hinzugefügt werden.JavaFx Resize VBox als Inhalt mit ScrollPane

Ich habe eine VBox in einem ScrollPane platziert. Die VBox wird mit TitledPanes gefüllt, sobald sie eintreffen. Sobald jedoch die TitledPanes den Platz füllen, der der Vbox zugewiesen ist, beginnen sich die TitledPanes zu überlappen. Idealerweise möchte ich Vbox die Größe anpassen und mit dem ScrollPane navigieren.

Ich habe die Vbox Max Höhe auf USE_COMPUTED_SIZE eingestellt. Ich habe dem ScrollPane einen Listener hinzugefügt, um Änderungen in der Größe der VBox zu hören, aber kein Glück. Irgendwelche Vorschläge?

scrollPane.vvalueProperty().addListener(new ChangeListener<Number>() { 
    public void changed(ObservableValue<? extends Number> ov, 
      Number old_val, Number new_val) { 
     vBox.setLayoutY(-new_val.doubleValue()); 
    } 
}); 
+1

Bitte geben Sie eine [MCVE] (http://stackoverflow.com/help/mcve) wir in der Lage zu machen zu reproduzieren. Normalerweise (wenn Sie keine Einschränkungen verwenden), wenn Sie eine 'VBox' in eine' ScrollPane' setzen, wird die 'VBox' größer, wenn mehr und mehr Kinder hinzugefügt werden und die' ScrollPane' ihre Bildlaufleiste anzeigt. – DVarga

Antwort

0

Gibt es einen Grund, warum Sie eine VBox verwenden statt einer Accordion? Mit einem Accordion könnten Sie ein ListChangeListener nutzen für Änderungen in TitledPane Nummer zu überprüfen und dann die Größe der Accordion einstellen, wenn ein Element hinzugefügt oder entfernt wurde:

accordion.getPanes().addListener(new ListChangeListener<Item>() { 
    public void onChanged(Change<tem> c) { 
     while (c.next()) { 
      if(c.wasAdded() || c.wasRemoved){ 
       //resize Accordion in dependency of the vvalue of your scrollpane 
      } 
     } 
    }); 

Für ein VBox soll das Prinzip noch gültig sein:

vbox.getChildren().addListener(new ListChangeListener<Item>() { 
    public void onChanged(Change<tem> c) { 
     while (c.next()) { 
      if(c.wasAdded() || c.wasRemoved){ 
       //rezise VBox in dependency of the vvalue of your scrollpane 
      } 
     } 
    }); 

based on

+0

Danke für die Antwort. Ich habe eine VBox benutzt, weil ich mehrere TitledPanes gleichzeitig öffnen kann. Der ScrollPane wurde einem Ankerfenster in einem SplitPane hinzugefügt. Es stellt sich heraus, dass die VBox dadurch wachsen kann. Das Hinzufügen des ScrollPanes direkt zu meinem SplitPane hat den Trick gemacht. Vielen Dank. –