2016-11-12 97 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

相關問題