1

数独アプリケーションに取り組んでいますが、進行を妨げる問題が発生しています。私がやろうとしているのは、ループで作成したこの数独ボードを作成することです。これにより、Label が StackPane に追加され、その StackPane が指定された場所に GridPane に入ります。だから私は、このボードに一定のサイズを持たせ、それ以上大きくならないようにしようとしています。

たとえば、GridPane を AnchorPane に配置し、AnchorPane を BorderPane の中央に合わせようとするなど、さまざまなことを調査して試してみましたが、行が多すぎると常にウィンドウの外側を超えているようです。数独ボードの列。

私がやろうとしているのは、すべてのボードの設定サイズを取得することです。必要に応じて、そのポイントまで引き伸ばすか、必要に応じて縮小します。添付の図は、中央に GridPane を配置した BorderPane を使用しています。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 に答える