2016-11-12 103 views
0

我不知道如何暂停中间的事件处理程序,我甚至不知道它是否可能。 Infact,在附带的代码中,我想: 玩家点击单元格后,UI会根据玩家点击的内容更新单元格。 然后,用户界面暂停2秒。然后计算机播放,更新单元格。 非常感谢您的回答,我很绝望;)如何在事件处理程序中间暂停UI?

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

您应该考虑使用线程进行耗时的计算。 – abbath

回答

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(...)的呼叫。

+0

非常感谢! – Louis

相关问题