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