2013-09-22 3 views
0

Je crée deux objets javafx.scene.shape.Rectangle dans un GridPane en procédant comme suit.Modifier dynamiquement la couleur d'un rectangle dans Javafx

rectArray = new Rectangle[2]; 

boardGrid.setStyle("-fx-background-color: #C0C0C0;"); 

rectArray[0] = new Rectangle(12,12); 
rectArray[0].setFill(Color.AQUA); 
boardGrid.add(rectArray[0], 2, 0); 

rectArray[1] = new Rectangle(12,12); 
rectArray[1].setFill(Color.BLACK); 
boardGrid.add(rectArray[1], 2, 1);  

Button buttonStart = new Button("Change color"); 
buttonStart.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      rectArray[0].setFill(Color.RED); 
      try { 
       Thread.sleep(2000); 
      } 
      catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      rectArray[1].setFill(Color.AZURE); 
     } 
}); 
boardGrid.add(buttonStart, 3, 1); 
initializeScene(primaryStage, boardGrid); 
... 

Quand je lance le code que je suis capable de voir deux rectangles (un dans Aqua et un en noir) et quand je clique sur le bouton, je vais devoir attendre les 2 secondes pour voir le changement de couleurs des deux rectangles.

Je change la couleur d'un rectangle avant d'appeler Thread.sleep(2000) puis je change la couleur du rectangle suivant.

Ma question est pourquoi suis-je censé attendre 2 secondes? Existe-t-il un moyen de mettre à jour dynamiquement les couleurs du rectangle?

Répondre

1

Vous dormez sur le fil d'interface utilisateur qui bloque tout traitement ultérieur (y compris le rafraîchissement de l'écran).

Si vous devez retarder du code, vous pouvez utiliser un PauseTransition pour attendre deux secondes et utiliser sa méthode onFinished pour exécuter le reste de votre code après l'attente.

Questions connexes