无法调整正确嵌套的窗格 JavaFX

Unable to resize correctly nested Pane JavaFX

我现在的情况是:一个主 windows 和一个主 BorderPane。在它的中心我有一个 AnchorPane 里面有一些物体。我想在窗格的高度内均匀分布对象,即使调整窗格大小也是如此。

我遇到的问题是,当调整大小增加窗格的高度时,一切正常。当我减小 window 的大小时,窗格的高度继续增加。

我已经使用简单的一行重现了这个示例应用程序中的错误(在我的应用程序中我也有这样一行):

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

}

我已经看到避免嵌套,一切都按预期工作。

这有什么问题?

请帮我找到正确的方向。

这是我的解释..

BorderPane 不会将其 children 的大小调整为其布局 Bounds,它很粗心,同样适用于 AnchorPane 甚至 Pane,当您有一个嵌套,你的行结束点与 Pane 的高度相匹配,所以它会自动服从任何值被限制在它上面,但是如果你将 AnchorPane 嵌套在 BorderPane谁来照顾孩子? BorderPaneAnchorPane 是一个糟糕的婚姻,除非你想把他们放在契约婚姻中,你手动检查每个人的身高和对齐方式,所以 BorderPane 的身高增加并且 AnchorPane 做同样的事情,你的尊重匹配是 parent。此外,您对 innerstatic 引用是 Pane,对于 Pane,您必须手动将 children 放置在 Node 中,Pane 不会为你做那件事,所以使用 Pane 意味着你的 children 将成为四处游荡的街头孩子。

希望对您有所帮助