我有一个包含 Canvas 的 BorderPane,Canvas 的高度和宽度属性绑定到 BorderPane 的属性。BorderPane 又是场景的根。
这一切都很好。如果我调整窗口大小,BorderPane 的大小会更改以匹配场景的大小,并且 Canvas 会更改以匹配 BorderPane 的大小。
但是,如果我引入另一个 BorderPane,它将停止工作:内部 BorderPane 和 Canvas 将随着 Scene 和外部 BorderPane 的增长而增长,但是当我缩小窗口时,它们不会缩小。
Working: Not working:
┌──────────────┐ ┌────────────────┐
│ Scene │ │ Scene │
│┌────────────┐│ │┌──────────────┐│
││ BorderPane ││ ││ BorderPane ││
││┌──────────┐││ ││┌────────────┐││
│││ Canvas │││ │││ BorderPane │││
││└──────────┘││ │││┌──────────┐│││
│└────────────┘│ ││││ Canvas ││││
└──────────────┘ │││└──────────┘│││
││└────────────┘││
│└──────────────┘│
└────────────────┘
有效的代码:
BorderPane parent = new BorderPane();
Canvas canvas = new Canvas();
canvas.widthProperty().bind(parent.widthProperty());
canvas.heightProperty().bind(parent.heightProperty());
parent.setCenter(canvas);
Scene scene = new Scene(parent);
stage.setScene(scene);
stage.show();
不起作用的代码:
BorderPane inner = new BorderPane();
Canvas canvas = new Canvas();
canvas.widthProperty().bind(inner.widthProperty());
canvas.heightProperty().bind(inner.heightProperty());
inner.setCenter(canvas);
BorderPane outer = new BorderPane();
outer.setCenter(inner);
Scene scene = new Scene(outer);
stage.setScene(scene);
stage.show();
我添加了一些日志记录以确认问题:
# scene, outer pane, inner pane, and canvas growing
outer width: 1364.0 -> 1374.0
scene width: 1364.0 -> 1374.0
outer height: 339.0 -> 342.0
scene height: 339.0 -> 342.0
canvas width: 1364.0 -> 1374.0
inner width: 1364.0 -> 1374.0
canvas height: 339.0 -> 342.0
inner height: 339.0 -> 342.0
# scene and outer pane shrinking, canvas and inner not
outer width: 1374.0 -> 1327.0
scene width: 1374.0 -> 1327.0
outer height: 342.0 -> 330.0
scene height: 342.0 -> 330.0
outer width: 1327.0 -> 1290.0
scene width: 1327.0 -> 1290.0
outer height: 330.0 -> 326.0
scene height: 330.0 -> 326.0
显然,在这个玩具示例中,我可以只删除中间的 BorderPane,但是如果我想制作一个可重用、可调整大小的组件来包装 Canvas 怎么办?我怎样才能确保它总是与父母一起调整大小?无论如何,嵌套的 BorderPanes 是怎么回事?