1

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

我整个晚上都在研究和尝试不同的事情,例如将 GridPane 放入 AnchorPane 并尝试将 AnchorPane 放在 BorderPane 的中心,但是当您使用太多行时,它似乎总是超出窗口之外和数独板的列。

我要做的是为所有板设置一个尺寸,所以如果需要它会拉伸到那个点,或者如果需要它会缩小。所附图片使用的是 BorderPane,中间有一个 GridPane。您可以看到 16x16 非常适合,而 25x25 刚好在窗外。

帮助将不胜感激。

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

http://i.imgur.com/BrJrpiY.png

尝试创建 16x16 时窗口的外观图片。这也使用插图将其推向顶部,因此它看起来并不太格格不入。

http://i.imgur.com/7a0QJx8.jpg

4

1 回答 1

1

您所要做的就是设置网格约束以满足您的需求。为此,将其Labels放入 a GridRow(不需要 a StackPane)并将其 vAlignment 和 hAlignment 设置为 Center。然后将标签的 vGrow 和 hGrow 设置为Priority.ALWAYS

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);
    }
}
于 2016-04-30T01:57:50.767 回答