gpt4 book ai didi

JavaFX GridPane 对象对齐

转载 作者:行者123 更新时间:2023-12-02 01:49:11 27 4
gpt4 key购买 nike

我正在尝试使用 JavaFX 创建一个场景,其中程序的标题位于顶部中心,按钮位于场景左侧的垂直线上。然而,这两个元素都聚集在场景的右上角,而不是我想要的位置。

如何让这些元素显示在我想要的位置?

以下是我尝试设置程序标题位置的方法:

  grid.add(gameTitle, 0, 0);
GridPane.setHalignment(gameTitle, HPos.CENTER);
GridPane.setValignment(gameTitle, VPos.TOP);

我尝试类似地设置 VBox 对象:

  grid.getChildren().add(buttonBox);
GridPane.setHalignment(buttonBox, HPos.LEFT);
GridPane.setValignment(buttonBox, VPos.CENTER);

这是显示的内容: This is what is displayed

我的整个 MainMenu 类。 (这个类在我的主类中被调用来构建场景):

package scenes;

import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.application.Platform;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class MainMenu {
public Pane getMainMenuPane() {
// Create the scene grid
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);

// Set the game title to the top center
Text gameTitle = new Text("Bandit King");
Font titleFont = new Font(75);
gameTitle.setFont(titleFont);
//
grid.add(gameTitle, 0, 0);
GridPane.setHalignment(gameTitle, HPos.CENTER);
GridPane.setValignment(gameTitle, VPos.TOP);

// Create Button objects and put in VBox
Button[] buttArr = makeButtons();
VBox buttonBox = new VBox();
buttonBox.getChildren().addAll(buttArr);
buttonBox.setSpacing(10);

// add Button VBox to GridPane
grid.getChildren().add(buttonBox);
GridPane.setHalignment(buttonBox, HPos.LEFT);
GridPane.setValignment(buttonBox, VPos.CENTER);

return (Pane) grid;
}

private Button[] makeButtons() {
// Create buttons
Button start = new Button("Start a New Game");
Button load = new Button("Load a Saved Game");
Button exit = new Button("Exit the Game");

// set Button actions
start.setOnAction( a -> {
System.out.println("WIP- start game.");
});
load.setOnAction( a -> {
System.out.println("WIP- load game");
});
exit.setOnAction( a -> {
Platform.exit();
System.exit(0);
});

// return Button[] array
Button[] buttArr = {start, load, exit};
return buttArr;
}


}

我的主类(显示场景):

package central;

import javafx.stage.Stage;
import scenes.*;
import controllers.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;

public class Main extends Application {

// Get scene panes
private static Pane mainMenu = new MainMenu().getMainMenuPane();

// Create SceneController object.
private static Scene scene = new Scene(mainMenu, 1600, 900);
public static SceneController SceneControl = new SceneController(scene);

@Override
public void start(Stage stage) {
stage.setTitle("Bandit King");
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
launch(args);
}


}

最佳答案

您添加 GridPane 子级的默认单元格是 (0, 0),这就是您在这一行中所做的操作:

grid.getChildren().add(buttonBox);

您需要将其更改为

grid.add(buttonBox, 0, 1);

将行索引设置为 1。(还有其他方法可以以这种方式分配行索引,但在这种情况下这是最方便的选项。)

但这不会导致第一列占据 GridPane 的整个宽度。如果您还希望第一列占据所有可用宽度,则需要通过添加 ColumnConstraints 来指定这一点:

ColumnConstraints constraints = new ColumnConstraints();
constraints.setHgrow(Priority.ALWAYS);

grid.getColumnConstraints().add(constraints);

关于JavaFX GridPane 对象对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53253552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com