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

时间:2016-11-12 17:56:39

标签: javafx

我不知道如何暂停中间的事件处理程序,我甚至不知道是否可能。 事实上,在附带的代码中,我希望如此: 在玩家点击单元格后,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 ...");
                        }
                }
            });
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
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(...)的来电。