JavaFX,can';t使GridPane与BorderPane的中心对齐

JavaFX,can';t使GridPane与BorderPane的中心对齐,java,javafx,gridpane,borderpane,Java,Javafx,Gridpane,Borderpane,我正在开发一个数独应用程序,但我遇到了一个阻碍我进步的问题。我想做的是制作这个我用循环创建的数独板,它在StackPane中添加一个标签,StackPane进入GridPane的指定位置。所以我试图强迫这块板有一个固定的尺寸,并且不能超过这个值 我花了一整晚的时间研究和尝试不同的东西,例如把网格窗格放进一个锚面板,并试图把锚面板放在BorderPane的中心,但是当你在数独板上使用太多的行和列时,锚面板似乎总是超出了窗口之外 我想做的是为所有的电路板设定一个尺寸,所以如果需要,它会拉伸到那个点,

我正在开发一个数独应用程序,但我遇到了一个阻碍我进步的问题。我想做的是制作这个我用循环创建的数独板,它在StackPane中添加一个标签,StackPane进入GridPane的指定位置。所以我试图强迫这块板有一个固定的尺寸,并且不能超过这个值

我花了一整晚的时间研究和尝试不同的东西,例如把网格窗格放进一个锚面板,并试图把锚面板放在BorderPane的中心,但是当你在数独板上使用太多的行和列时,锚面板似乎总是超出了窗口之外

我想做的是为所有的电路板设定一个尺寸,所以如果需要,它会拉伸到那个点,或者如果需要,它会收缩。附图是用一个边框,中间放了一个格栅。您可以看到,16x16非常适合,而25x25正好放在窗外

非常感谢您的帮助

尝试创建25x25时窗口外观的图片

尝试创建16x16时窗口外观的图片。 这也是使用插图,以推动它更向顶部,所以它看起来不太不合适


您所要做的就是设置网格约束以满足您的需要。为此,将
标签
放入
网格行
(无需
堆叠窗格
),并将其有效期和有效期设置为居中。然后将标签的vGrow和hGrow设置为
优先级。始终

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {

        GridPane gridPane = createMainGrid(2, 2);
        gridPane.setAlignment(Pos.CENTER);
        gridPane.setHgap(10);
        gridPane.setVgap(10);

        Scene scene = new Scene(gridPane);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private GridPane createMainGrid(int rows, int columns) {
        GridPane grid = new GridPane();

        for (int colIdx = 0; colIdx < columns; colIdx++) {
            for (int rowIdx = 0; rowIdx < rows; rowIdx++) {
                GridPane innerGrid = createGrid(4, 4);
                grid.add(innerGrid, colIdx, rowIdx);
                GridPane.setConstraints(innerGrid, colIdx, rowIdx, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS);
            }
        }
        return grid;
    }

    private GridPane createGrid(int rows, int columns) {
        GridPane grid = new GridPane();

        Random random = new Random();

        for (int colIdx = 0; colIdx < columns; colIdx++) {
            for (int rowIdx = 0; rowIdx < rows; rowIdx++) {
                Label label = new Label(String.valueOf(random.nextInt(rows * columns)));
                label.setMinSize(30, 30);
                label.setAlignment(Pos.CENTER);
                grid.add(label, colIdx, rowIdx);
                GridPane.setConstraints(label, colIdx, rowIdx, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS);
            }
        }
        return grid;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
public类主扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
GridPane GridPane=createMainGrid(2,2);
网格窗格。设置对齐(位置中心);
网格窗格。setHgap(10);
gridPane.setVgap(10);
场景=新场景(网格窗格);
初级阶段。场景(场景);
primaryStage.show();
}
私有网格窗格createMainGrid(int行、int列){
GridPane grid=新建GridPane();
对于(int colIdx=0;colIdx