JavaFX:如何根据舞台将中心节点置于边框上?

我有一个问题,将我的边框中的按钮居中,根据舞台居中.它根据边框定居,但我希望它位于窗口的正中心.

《JavaFX:如何根据舞台将中心节点置于边框上?》

我指的是我的图片的底部有播放按钮和难以选择的框.

我使用边框将难度部分放在右侧,将播放按钮放在中间.

如您所见,游戏不在图片的中心.

我想这样做,但我不确定如何.我想我可以将左边节点的宽度设置为等于我的右边节点,但是我的左边节点没有任何东西.

// bottom section for positioning
    BorderPane settings = new BorderPane();
    settings.setPadding(new Insets(10));

    // play button
    Button playBtn = new Button("Play");
    settings.setCenter(playBtn);

    // difficulty options
    Label diffLabel = new Label("Difficulty: ");
    ChoiceBox<String> diffBox = new ChoiceBox<String>(FXCollections.observableArrayList(
            "Easy", "Standard", "Hard"
    ));
    diffBox.getSelectionModel().select(1);

    // for wrapping the diffuclty.
    HBox difficulty = new HBox(diffLabel, diffBox);
    difficulty.setAlignment(Pos.CENTER);
    difficulty.setSpacing(10);

    settings.setRight(difficulty);

最佳答案 其中一种可能性是在BorderPane的左侧添加一个Region,就像一个spacer.

doc of BorderPane

The left and right children will be resized to their preferred widths
and extend the length between the top and bottom nodes. And the center
node will be resized to fill the available space in the middle.

因此,在右侧添加与HBox宽度相同的垫片可以解决问题:

Region padderRegion = new Region();
padderRegion.prefWidthProperty().bind(difficulty.widthProperty());
settings.setLeft(padderRegion);

这里左侧垫片的宽度与右侧HBox的宽度相关,因此居中的节点(播放按钮)将在屏幕上居中.

另一种可能性是在HBox中使用各种填充物:

HBox bottomPanel = new HBox();
bottomPanel.setAlignment(Pos.CENTER);

Region padderRegion1 = new Region();
Region padderRegion2 = new Region();
Region padderRegion3 = new Region();
padderRegion1.prefWidthProperty().bind(diffLabel.widthProperty().add(diffBox.widthProperty()));

bottomPanel.getChildren().addAll(padderRegion1, padderRegion2, playBtn, padderRegion3, diffLabel, diffBox);
HBox.setHgrow(padderRegion2, Priority.ALWAYS);
HBox.setHgrow(padderRegion3, Priority.ALWAYS);
点赞