无法调整正确嵌套的窗格 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
谁来照顾孩子? BorderPane
和 AnchorPane
是一个糟糕的婚姻,除非你想把他们放在契约婚姻中,你手动检查每个人的身高和对齐方式,所以 BorderPane
的身高增加并且 AnchorPane
做同样的事情,你的尊重匹配是 parent。此外,您对 inner
的 static
引用是 Pane
,对于 Pane
,您必须手动将 children 放置在 Node
中,Pane
不会为你做那件事,所以使用 Pane
意味着你的 children 将成为四处游荡的街头孩子。
希望对您有所帮助
我现在的情况是:一个主 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
谁来照顾孩子? BorderPane
和 AnchorPane
是一个糟糕的婚姻,除非你想把他们放在契约婚姻中,你手动检查每个人的身高和对齐方式,所以 BorderPane
的身高增加并且 AnchorPane
做同样的事情,你的尊重匹配是 parent。此外,您对 inner
的 static
引用是 Pane
,对于 Pane
,您必须手动将 children 放置在 Node
中,Pane
不会为你做那件事,所以使用 Pane
意味着你的 children 将成为四处游荡的街头孩子。
希望对您有所帮助