2015-04-16 3 views
6

Ich habe die aktuelle Situation: ein Hauptfenster mit einem Haupt BorderPane. In der Mitte davon habe ich eine AnchorPane mit einigen Objekten drin. Ich möchte die Objekte innerhalb der Höhe des Bereichs gleichmäßig verteilen, auch wenn die Größe des Bereichs geändert wird.Kann nicht korrekt verschachtelte Palette JavaFX

Das Problem, das ich habe, ist, dass alle Dinge funktionieren, wenn die Größe die Höhe des Fensters vergrößern. Wenn ich die Größe des Fensters verkleinere, nimmt die Höhe des Fensters weiter zu.

Ich habe den Fehler in diesem Beispiel Anwendung unter Verwendung einer einfachen Linie (in meiner Anwendung ich habe auch eine Zeile wie diese) wiedergegeben:

import javafx.application.Application; 

import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.Pane; 
import javafx.scene.shape.Line; 
import javafx.stage.Stage; 

public class ResizeProblem extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     BorderPane root = new BorderPane(); 
     AnchorPane inner = new AnchorPane(); 

     Line line = new Line(); 

     // comment from here... 
     root.setCenter(inner); 
     Pane pane = inner; 
     // ...to here and uncomment next to make things work 
     //Pane pane = root; 

     line.startXProperty().bind(pane.widthProperty().divide(2)); 
     line.endXProperty().bind(pane.widthProperty().divide(2)); 
     line.setStartY(0.); 
     line.endYProperty().bind(pane.heightProperty()); 

     pane.heightProperty().addListener((obs, ov, nv) -> System.out.println("ov: " + ov + " nv: " + nv)); 

     pane.getChildren().add(line); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Resize Problem"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Ich habe die Verschachtelung gesehen zu vermeiden, funktioniert alles wie erwartet .

Was ist daran falsch?

Bitte helfen Sie mir, die richtige Richtung zu finden.

+0

Nur zur Info: Nrn. + d statt Nummer + Punkt (line.setStartY (0T);) II denken, dass es ein besserer Stil. – Marcel

Antwort

1

Dies ist meine Erklärung ..

BorderPane die Größe nicht seine Kinder zu sein Layout Bounds, es unvorsichtig, gleiche gilt für AnchorPane und sogar Pane, wenn Sie eine Verschachtelung haben, zeigen Sie Ihre Zeilenende wird mit dem angepassten Pane 's Höhe, so automatisch es gehorcht, was Wert wird auf sie beschränkt, aber wenn Sie ein AnchorPane in einem BorderPane nest wer kümmert sich um die Kinder? BorderPane und AnchorPane ist eine schlechte Ehe, es sei denn, Sie möchten sie in eine Ehe Ehe, wo Sie manuell überprüfen die Höhe und Ausrichtung jedes einzelnen, so die BorderPane Höhe erhöht und die AnchorPane tut das gleiche, und Ihr Respekt entspricht dem Elternteil . Auch Ihre static Referenz von inner ist eine Pane, und mit Pane müssen Sie Ihre Kinder in Ihrem Node, Pane manuell positionieren, tut das nicht für Sie so mit Pane bedeutet, dass Ihre Kinder werden Straßenkinder rund um.

Hoffen, dass es hilfreich

Verwandte Themen