如何在事件处理程序的中间暂停UI



我不知道如何在中间暂停事件处理程序,我甚至不知道它是否可能。事实上,在附加的代码,我想:在玩家点击单元格后,UI会根据玩家点击的内容更新单元格。然后,UI暂停大约2秒。然后电脑播放,更新单元格。非常感谢你的回答,我很绝望;)

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 ...");
                        }
                }
            });
        }
    }

你可以这样做

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();

所以你基本上把所有你想在暂停后执行的代码移动到onFinished处理程序。当UI暂停时,你可能需要也可能不需要禁用它;如果不需要,可以删除对setDisable(...)的调用

最新更新