У меня есть GridPane с 20 пустыми текстовыми полями. Я хочу перебирать каждое текстовое поле и обновлять текст в каждом со значениями из ArrayList с паузой в 1 секунду между каждым. Я не могу понять это.
Я создаю GridPane так:
GridPane grid = new GridPane();
Scene drawing = new Scene(new VBox(grid), 500, 200);
primaryStage.setScene(drawing);
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 10; ++j) {
TextField tf = new TextField();
tf.setPrefHeight(50);
tf.setPrefWidth(50);
tf.setAlignment(Pos.CENTER);
tf.setEditable(false);
grid.add(tf, j, i);
}
}
Теперь я хочу просмотреть каждое текстовое поле и добавить текст с паузой между ними. Использование Thread.sleep() в цикле приводит к сбою приложения. Я пробовал PauseTransition следующим образом:
ArrayList<Integer> numsDrawn= game.draw();
int count = 0;
for (Node node : grid.getChildren()) {
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(e -> ((TextField)node).setText(Integer.toString(numsDrawn.get(count))));
pause.play();
count++;
}
Но я получаю сообщение об ошибке Количество локальных переменных, определенное в объемлющей области, должно быть окончательным или фактически окончательным.
Счетчик должен иметь возможность изменяться, чтобы я мог перебирать список numsDrawn и добавлять разный текст в каждое TextField. Я попытался создать отдельный обработчик событий вместо лямбды, но получил ту же ошибку со счетом.
Если кто-то может дать совет о том, как сделать эту, казалось бы, простую задачу, я был бы очень признателен.