Louis
Louis

Reputation: 438

How to pause the UI in the middle of an event handler?

I don't know how to pause an event handler in the middle, I don't even know if it is possible. Infact, in the code attached, I would like that : After the player clicked on the cell, the UI updates the cells according to what the player clicked. Then, the UI pauses for like 2 seconds. And the computer plays after that, updating the cells. Thank you very much for your answer, I am quite desperate ;)

for (Cell cell : cells) {
        if (cell.getHouseNumber() >= 6) {
            cell.setOnMousePressed(new EventHandler<MouseEvent>() {
                public void handle(MouseEvent me) {


                        cell.setFill(Color.WHITE);
                        System.out.println(cell.getHouseNumber() - 6);
                        if(player1.sow(cell.getHouseNumber() - 6)){

                            for (int i = 0; i < cells.length; i++) {
                                if (i < 6) {
                                    cells[i].setSeedsNumber(player1.getSeeds(cells[i].getHouseNumber()));
                                    try {
                                        cells[i].setImage();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }

                                }
                                else {
                                    cells[i].setSeedsNumber(player1.getSeeds(cells[i - 6].getHouseNumber()));
                                    try {
                                        cells[i].setImage();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }

                            }
                            southBoard.setSeedsNumber(player1.getPlayerScore());

                            playerTurnLabel.setText("Computer playing");

//PAUSE THE UI FOR 2s

                            player2.computerMove();


                            for (int i = 0; i < cells.length; i++) {
                                if (i < 6) {
                                    cells[i].setSeedsNumber(player1.getSeeds(cells[i].getHouseNumber()));
                                    try {
                                        cells[i].setImage();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }

                                }
                                else {
                                    cells[i].setSeedsNumber(player1.getSeeds(cells[i - 6].getHouseNumber()));
                                    try {
                                        cells[i].setImage();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }

                            }
                            playerTurnLabel.setText("Your turn to play");


                        }else{
                            playerTurnLabel.setText("Move prohibited ...");
                        }
                }
            });
        }
    }

Upvotes: 0

Views: 451

Answers (1)

James_D
James_D

Reputation: 209339

You can do something like

southBoard.setSeedsNumber(player1.getPlayerScore());
playerTurnLabel.setText("Computer playing");
playerTurnLabel.getScene().getRoot().setDisable(true);

PauseTransition pause = new PauseTransition(Duration.seconds(2));
pause.setOnFinished(event -> {
    player2.computerMove();

    // etc etc

    playerTurnLabel.getScene().getRoot().setDisable(false);
});
pause.play();

So you basically move all the code you want executed after the pause to the onFinished handler. You might or might not need the UI disabled while it is paused; you can remove the calls to setDisable(...) if you don't need them.

Upvotes: 1

Related Questions