2013-09-22 2 views
0

GridPane에 두 개의 javafx.scene.shape.Rectangle 개체를 생성하고 다음을 수행합니다.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); 
... 

나는 두 사각형 (아쿠아의 한 검은 한) 내가 버튼을 클릭하면, 나는 2 초 색상의 변화를 볼 수 있도록 기다려야 할 것을 볼 수 있어요 코드를 실행하면 두 직사각형의

Thread.sleep(2000)이 호출되기 전에 하나의 사각형의 색을 변경 한 다음 다음 사각형의 색을 변경합니다.

제 질문은 왜 2 초를 기다려야합니까? 사각형의 색상을 동적으로 업데이트 할 수있는 방법이 있습니까?

답변

1

추가 처리 (화면 새로 고침 포함)를 차단하는 UI 스레드에서 자고 있습니다.

일부 코드를 지연해야하는 경우 PauseTransition을 사용하여 2 초 동안 기다린 다음 onFinished 메서드를 사용하여 대기 후 나머지 코드를 실행할 수 있습니다.