JavaFx布局:消失/无组织窗格

JavaFx布局:消失/无组织窗格,java,javafx,Java,Javafx,我有一个背景窗格,用于绘制与边框窗格、VBox和HBox一起使用时不显示的对象。此外,我的边框窗格没有正确定位布局(左、下、右)。 我曾尝试使用多个不同的窗格,并将VBox和HBox添加到其中,但在布局不符合预期且主绘图窗格(画布)消失的情况下,我遇到了类似的错误 BorderPane bp = new BorderPane(); button1 = new Button("Undo"); button2 = new Button("Erase"); HBox hb = new HBox(10)

我有一个背景窗格,用于绘制与边框窗格、VBox和HBox一起使用时不显示的对象。此外,我的边框窗格没有正确定位布局(左、下、右)。 我曾尝试使用多个不同的窗格,并将VBox和HBox添加到其中,但在布局不符合预期且主绘图窗格(画布)消失的情况下,我遇到了类似的错误

BorderPane bp = new BorderPane();
button1 = new Button("Undo");
button2 = new Button("Erase");
HBox hb = new HBox(10);
hb.getChildren().addAll(button1, button2);

TilePane tp = new TilePane();
vb = new VBox();
vb.setPadding(new Insets(10, 10, 10, 10));
vb.setSpacing(25);
vb.setStyle("-fx-padding: 10;" + 
        "-fx-border-style: solid inside;" + 
        "-fx-border-width: 2;" +
        "-fx-border-insets: 5;" + 
        "-fx-border-radius: 5;" + 
        "-fx-border-color: black;");

colorCombo = new ComboBox<String>();
colorCombo.getItems().addAll("Black","Blue","Green","Red","Yellow","Orange","Pink");
colorCombo.setValue("Black");
colorCombo.setMinWidth(100);

ToggleGroup group1 = new ToggleGroup();

rbutton1 = new RadioButton("Rectangle");
rbutton1.setToggleGroup(group1);
rbutton1.setMinWidth(80);
rbutton1.setSelected(true);
rbutton2 = new RadioButton("Circle");
rbutton2.setToggleGroup(group1);
rbutton2.setMinWidth(80);

canvas = new Pane();
canvas.setStyle("-fx-background-color: beige;");

vb.getChildren().addAll(colorCombo, rbutton1, rbutton2);
tp.getChildren().add(vb);
bp.setLeft(tp);
bp.setBottom(hb);
bp.setRight(canvas);
this.getChildren().addAll(bp);
BorderPane bp=newborderpane();
button1=新按钮(“撤消”);
按钮2=新按钮(“擦除”);
HBox hb=新的HBox(10);
hb.getChildren().addAll(按钮1、按钮2);
TilePane tp=新的TilePane();
vb=新的VBox();
设置填充(新的插图(10,10,10,10));
vb.setspace(25);
vb.setStyle(“-fx填充:10;”+
“-fx边框样式:内部实心;”+
“-fx边框宽度:2;”+
“-fx边框插图:5;”+
“-fx边框半径:5;”+
“-fx边框颜色:黑色;”;
colorCombo=新组合框();
colorCombo.getItems().addAll(“黑色”、“蓝色”、“绿色”、“红色”、“黄色”、“橙色”、“粉色”);
colorCombo.setValue(“黑色”);
colorCombo.setMinWidth(100);
ToggleGroup group1=新的ToggleGroup();
RBbutton1=新单选按钮(“矩形”);
rbutton1.setToggleGroup(组1);
rbutton1.设置最小宽度(80);
rbutton1.setSelected(真);
RBbutton2=新单选按钮(“圆圈”);
rbutton2.setToggleGroup(组1);
rbutton2.设置最小宽度(80);
canvas=新窗格();
canvas.setStyle(“-fx背景色:米色;”);
vb.getChildren().addAll(colorCombo、rbutton1、rbutton2);
tp.getChildren().add(vb);
设置左(tp);
赛博托姆(hb);
设置权限(画布);
this.getChildren().addAll(bp);
TilePane和BorderPane是我最新的实验。我使用了
bp.setRight(canvas)
查看是否可以让画布显示,即使我希望画布是整个背景,而不仅仅是右侧。画布不显示

来自:

顶部和底部子对象的大小将调整为其首选高度 并扩展边框窗格的宽度左右两个孩子 将大小调整为其首选宽度,并延长长度 在顶部和底部节点之间。中心节点将被调整大小 在中间填充可用空间。

对于任何没有子窗格的窗格,其首选宽度为0。您需要显式设置宽度


一个旁注:
窗格
即使有子窗格,也会首选宽度为0,因为
窗格
不布局子窗格以确定其自身的大小。

我创建了三个单独的网格窗格,并添加了vbox、hbox和画布(在设置了最小高度和宽度之后)添加到网格窗格,然后将网格窗格添加到边框窗格。这修复了我的程序的布局。

canvas
没有子级,也没有明确的首选大小,因此它的大小是0×0像素。如果希望画布位于窗口的中心而不是右侧,为什么不调用
bp.setCenter
而不是setRight?我已经尝试过setPrefSize()和setMinWidth()。画布现在仍在展示中