Я использую JavaFX для создания игры тральщика. У меня есть лямбда-выражение, где (на данный момент), когда я нажимаю кнопку из сетки кнопок, она устанавливает текст кнопки в качестве местоположения в 2D-массиве. Я получаю сообщение об ошибке «Текст локальной переменной, определенный во внешней области видимости, должен быть окончательным или фактически окончательным».
Я понимаю, что переменные, которые я использую в лямбда-выражении, не могут быть выполнены, поскольку они должны быть окончательными снаружи выражение. но я не могу понять, как обойти это.
static Stage stage;
Button[][] buttonGrid;
public void start(Stage primaryStage) throws Exception {
SetSettings.readSettings();
GridPane gridpane = new GridPane();
int gridSize = Minesweeper.gridSize;
buttonGrid = new Button[gridSize][gridSize];
for (int i = 0; i < gridSize; i++) {
for (int j = 0; j < gridSize; j++) {
buttonGrid[i][j] = new Button();
GridPane.setConstraints(buttonGrid[i][j], j, i);
}
}
String text = "";
for (int i = 0; i < gridSize; i++) {
for (int j = 0; j < gridSize; j++) {
text += i + "" + j;
buttonGrid[i][j].setOnAction(e -> {
buttonGrid[i][j].setText(text);
text = "";
});
gridpane.getChildren().add(buttonGrid[i][j]);
}
}
stage = primaryStage;
primaryStage.setOnCloseRequest(e -> {
e.consume();
ConfirmExit.display("Exit", "Are you sure you want to quit this game?");
});
primaryStage.setTitle("Minesweeper");
stage.getIcons().add(new Image("/Logo.jpg"));
Scene scene = new Scene(gridpane, 600, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
Он помечает i, j и текст в одной и той же ошибке.
gridSize - размер моей сетки для тральщика. buttonGrid - это сетка кнопок, которые я помещаю в gridPane.
Я нашел решение для stackoverflow, чтобы установить эти переменные как глобальные, но это не сработало.