У меня есть BorderPane, содержащий Canvas, со свойствами высоты и ширины 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?