Заполнение GridPane числами/строками

как я могу заполнить свою GridPane целыми числами или строками? В настоящее время я работаю над графическим интерфейсом Sudoku и не могу заставить его работать. Я уже знаю, что его невозможно отобразить с помощью Java FX Label, так как это класс java.fx.scene.control. Мне нужно как-то передать значения судоку в соответствующие координаты в 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); 
        }
    }
}

person Andrzej Stempnik    schedule 11.05.2016    source источник
comment
Вот пример: stackoverflow.com/questions/36949054/   -  person jns    schedule 11.05.2016


Ответы (1)


Исправление

Я уже знаю, что его невозможно отобразить с помощью 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 может иметь инициализацию. () используйте его для создания меток в сетке.

person jewelsea    schedule 11.05.2016
comment
Вы знаете, как очищать содержимое сетки после каждой заливки? Я получаю цифры на цифрах с каждым нажатием кнопки - person Andrzej Stempnik; 11.05.2016
comment
Однако я не создаю новую сетку при каждом нажатии кнопки, потому что она объявлена ​​в файле fxml. - person Andrzej Stempnik; 11.05.2016