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

时间:2018-10-09 00:46:35

标签: java javafx

我有一个背景窗格,该窗格用于绘制与BorderPane,VBox和HBox结合使用时不显示的对象。此外,我的BorderPane布局不正确(左,下,右)。 我尝试使用多个不同的窗格并将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);

TilePane和BorderPane是我最新的实验。我使用bp.setRight(canvas);来查看我是否甚至可以让画布完全显示,即使我希望画布是整个背景,而不仅仅是右边。画布不显示。

2 个答案:

答案 0 :(得分:0)

来自BorderPane

  

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

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

一个旁注:Pane仍将具有0的首选宽度,因为Pane不会布局其子级来确定其自身大小。

答案 1 :(得分:0)

我创建了三个单独的GridPanes,并将vbox,hbox和canvas(设置最小高度和宽度后)添加到了网格窗格,然后将网格窗格添加到BorderPane。这固定了我程序的布局。