用 numbers/strings 填充 GridPane

Filling GridPane with numbers/strings

如何用整数或字符串填充我的 GridPane?我目前正在研究数独 GUI,但无法正常工作。我已经知道不可能用 Java FX 标签显示它,因为它是 java.fx.scene.control class。我需要以某种方式将数独值传输到 GridPane 中的相应坐标。

public class Controller {

GridPane sudokuGrid;
private Label[][] label = new Label[9][9];

public void generateButtonClicked(ActionEvent actionEvent) {
    SudokuBoard board = new SudokuBoard();
    BacktrackingSudokuSolver solver = new BacktrackingSudokuSolver();
    solver.fillBoard(0, 0, board);
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            label[i][j] = String.valueOf(board.getDigit(i, j).getNum());
            sudokuGrid.add(???, i, j); 
        }
    }
}

更正

I already know that it's impossible to display it with Java FX Label since it's java.fx.scene.control class.

这不是真的,标签是用来显示值的。

解决方案

在您的循环中,创建一个标签并将其放置在您的网格中:

label[i][j] = new Label(String.valueOf(board.getDigit(i, j).getNum()));
sudokuGrid.add(label[i][j], i, j); 

其他问题的答案

do you know how to clear the content of the grid after every filling? I get digits on digits with every click of the button

只将标签添加到网格一次(创建网格时)。将标签添加到网格后,您无需再次添加它们。因此,使用上面的代码循环 运行 并初始化您的网格。

初始化完成后,只需在需要时更新标签的文本即可。例如,当您点击生成按钮时:

for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        label[i][j].setText(
               String.valueOf(board.getDigit(i, j).getNum())
        );
    }
}

如果要显示空白标签,只需将其文本设置为 null 或空字符串即可:

for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        label[i][j].setText(null);
    }
}

However I don't create a new grid with every click button, beacuse it's declared in a fxml file

您的 FXML 控制器可以有一个 initialize() 方法,用它在您的网格中创建标签。