2016-05-05 14 views
0

Ich entwickle eine JavaFX-Anwendung für Kinder, um einen kleinen Roboter zu steuern, würde das Kind die Befehle über Drag-n-Drops Befehlsblöcke definieren. Der Zielbereich ist ein Scrollpane mit einer VBox.JavaFX - ScrollPane/VBox - Auto schrumpfen

Ich würde gerne wissen, ob es eine Möglichkeit gibt, die ScrollPane und VBox autoresisable, also wenn ich einen Knoten zum Green Block hinzufügen muss wachsen (Aldeady tun) und wenn ich einen Knoten aus Green Block entfernen muss es schrumpfen. Hier

ist der Code:

// Set to BorderPane#Center<br/> 
boxCode = new VBox(0.0); 
boxCode.setMinSize(400, 80); 
// here I also set MaxSize using Double.MAX_VALUE and USE_COMPUTED_SIZE 

paneCode = new ScrollPane(boxCode); 
paneCode.setMinSize(400, 80); 
paneCode.setStyle("-fx-background-color:transparent;"); 
paneCode.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); 
layout.setCenter(paneCode); 

VBox mit den Knoten:
enter image description here

VBox ohne den Knoten:
enter image description here

Hier ist mein Projekt: GitHub - Programming Block

Vielen Dank!

+0

Sie müssen nur die minWidth der VBox passend einstellen. vbox.setMinWidth (someValue) – jns

+0

Sorry für vergessen. Ich habe gerade bearbeitet, um den Code und einige weitere Bilder zu zeigen. Ich habe die ScenicView zu inspizieren und die VBox ist tatsächlich verkleinern, aber die ScrollPane ist nicht. Es behält die letzte maximale Größe. –

+0

Warum brauchen Sie eine 'ScrollPane', wenn Sie nicht vorhaben, die' ScrollBars' zu zeigen? – fabian

Antwort

1

Ich bin nicht wirklich sicher, ob ich das Problem verstehe. Wenn ich minHeight für VBox und ScrollPane wie im folgenden Beispiel einstelle, funktioniert es für mich.

public void start(Stage primaryStage) { 

     Button btnAdd = new Button("add"); 
     Button btnRemove = new Button("remove"); 
     VBox box = new VBox(btnAdd, btnRemove); 
     box.setStyle("-fx-border-color:red"); 

     btnAdd.setOnAction(e -> box.getChildren().add(new Label("test"))); 

     btnRemove.setOnAction(e -> { 
      int idx = box.getChildren().size(); 
      box.getChildren().remove(idx - 1); 
     }); 

     ScrollPane scrollPane = new ScrollPane(box); 
     scrollPane.setMinHeight(200); 
     box.setMinHeight(200) ; 

     BorderPane root = new BorderPane(scrollPane); 

     primaryStage.setScene(new Scene(root, 300, 300)); 
     primaryStage.show(); 
    } 
+0

Nach dem Lesen Sie den Code, putzte ich den Code zu Ihrem aussieht und dann habe ich das Problem gefunden. Vielen Dank! Jetzt werde ich einen anderen Weg versuchen, um den linken Balken wachsen zu lassen, ohne dieses Verhalten zu unterbrechen. –

+0

Nur für jemanden, der so etwas versucht, habe ich die folgende Lösung verwendet. [Wie skaliere ich ein Bild, wenn ich die Größe des Fensters in JavaFx ändere] (http://stackoverflow.com/questions/22993550/how-to-resize-an-image-when-resizing-the-window-in-javafx) –