2016-11-12 5 views
0

途中でイベントハンドラを一時停止する方法がわかりませんが、可能かどうかわかりません。 Infact、添付されたコードで、私はそれを望みます: プレイヤーがセルをクリックすると、UIはプレイヤーがクリックしたものに従ってセルを更新します。 その後、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

あなたは、あなたは基本的にあなたが望むすべてのコードがonFinishedに一時停止した後に実行を移動

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

ような何かを行うことができますハンドラ。一時停止中にUIを無効にする必要がある場合とそうでない場合があります。必要がない場合はsetDisable(...)へのコールを削除できます。

+0

ありがとうございました! – Louis

関連する問題