用数字/字符串填充GridPane

时间:2016-05-11 00:49:33

标签: java javafx gridpane

如何用整数或字符串填充GridPane?我目前正在使用Sudoku GUI,但无法使用它。我已经知道用Java FX Label显示它是​​不可能的,因为它是java.fx.scene.control类。我需要以某种方式将sudoku值传递给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); 
        }
    }
}

1 个答案:

答案 0 :(得分:2)

校正

  

我已经知道用Java FX Label显示它是​​不可能的,因为它是java.fx.scene.control类。

不是这样,标签用于显示值。

解决方案

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

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

其他问题的答案

  

你知道如何在每次填充后清除网格的内容吗?每按一下按钮

,我都会得到数字

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

初始化完成后,只需在需要时更新标签文本。例如,单击“生成”按钮时:

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);
    }
}
  

但是我没有为每个点击按钮创建一个新网格,因为它是在fxml文件中声明的

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