我想在HBox
的中间放置一个带有红色矩形的BorderPane
,我希望该矩形能够与其容器(HBox)一起增长或缩小。
这是我的代码:
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane borderPane = new BorderPane();
HBox hBox = new HBox();
hBox.setAlignment(Pos.CENTER);
Rectangle rect = new Rectangle(hBox.getWidth(),50);
rect.setFill(Color.RED);
rect.widthProperty().bind(hBox.widthProperty().subtract(20));
hBox.getChildren().add(rect);
borderPane.setCenter(hBox);
Scene scene = new Scene(borderPane, 900, 600, Color.WHITE);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
但它不起作用。当我慢慢地调整框架的大小时,它会工作,但是,当我快速调整框架的大小时,矩形不在中间(也不是相同的尺寸),当我们最小化和最大化框架时,我们可以看到相同的东西。
我不明白为什么它不起作用。
答案 0 :(得分:2)
这就是发生的事情:
在布局期间询问rect
首选/最小/最大宽度时,它会回复当前宽度,即调整大小之前的宽度,因为到那时hBox
还没有调整大小。因此,hBox
的最小宽度报告为其当前宽度减去20.因此,当您缩小窗口时,hBox
仍将调整为其先前宽度减去20
有多种方法可以解决此问题,但更准确的答案取决于您尝试执行的操作,并且可能涉及使用Region
代替Rectangle
或覆盖{ {1}}矩形的父级方法。
这是一种接近现在的方式。它定义了一个可调整大小的矩形,并将其最小宽度覆盖为0.0,因此可以缩小HBox的尺寸。
layoutChildren