我正在使用数独应用程序,但我遇到的问题阻碍了我的进步。我想要做的就是制作这个我用循环创建的数独板,它将一个Label添加到StackPane中,然后StackPane进入GridPane的指定位置。因此,我试图强制这个电路板具有一定的尺寸,并且不会超过这一点。
我花了整整一个晚上研究和尝试不同的事情,例如将GridPane放入AnchorPane并尝试将AnchorPane放在BorderPane的中心,但它似乎总是超出窗外,你为sudoku棋盘使用了太多的行和列。
我尝试做的是为所有电路板设置一个固定尺寸,因此如果需要,它会被拉伸到那一点,或者如果需要它会缩小。附图中使用的是BorderPane,中间放置了一个GridPane。您可以看到16x16完全适合,而25x25只是在窗外。
帮助将受到高度赞赏。
尝试创建25x25时窗口的图示。
http://i.imgur.com/BrJrpiY.png
尝试创建16x16时窗口的图示。 这也是使用插入物将它推向顶部,因此它看起来不太合适。
答案 0 :(得分:1)
您需要做的就是设置网格约束以满足您的需求。为此,请将Labels
放入GridRow
(不需要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);
}
}