JavaFX l oop для создания кнопок, вызывающих проблемы с обработчиком событий - PullRequest
0 голосов
/ 04 мая 2020

Я создаю игру, чтобы скользить кусочки головоломки по доске. Прямо сейчас у меня есть список кнопок, и я заполняю его al oop, все остальные функции работают, однако после однократного перемещения плитки, когда я нажимаю на нее снова, я получаю исходный индекс сетки, а не обновленный индекс.

Я думаю, что это связано с тем, что требуется tmp каждый раз, когда я нажимаю кнопку, а не ее текущий обновленный индекс из списка. Я попытался изменить tmp в обработчиках событий на puzzle.indexOf (button), но тогда индекс каждой кнопки становится равным 31.

public class Main extends Application {  
  Stage game;
  Scene scene;
  GridPane grid;
  List<Button> tiles;
  Button button;


  @Override     
  public void start(Stage primaryStage) throws Exception { 
    game = primaryStage;
    GridPane board = new GridPane();
    List<Button> puzzle = new ArrayList<>();


    for(int i = 0; i < 32; i++) {
      puzzle.add(button = new Button(String.valueOf(i+1)));
      button.setPrefSize(150,150);

      int tmp = i;
      button.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent event) {

        if(nextToEmpty(puzzle, tmp) == true){
          swapButton(puzzle, puzzle.get(tmp), puzzle.get(findEmptyTile(puzzle)));  
        } else {
          System.out.println("Error");
        }
        }
      });
    }
...