2015-09-11 57 views
0

我有一個基本的javafx程序,其中一個模擬電梯的矩形必須在「向上」和「向下」按鈕的推動下上下移動。我已經成功地實施了代碼,這樣做如下:JavaFX:暫停直到動畫結束

public void handle(ActionEvent event) { 
    if (event.getSource() == upButton) { 
     //this should all be put into a 'slideNode' method 
     TranslateTransition translateTransition1 = new TranslateTransition(Duration.millis(500), theElevator); 
     translateTransition1.setByX(0); 
     translateTransition1.setByY(-50); 
     translateTransition1.setCycleCount(1); 
     translateTransition1.setAutoReverse(false); 
     translateTransition1.play(); 
    } 
} 

,我需要解決的問題是當電梯中途這項議案並再次按下按鈕會發生什麼 - 電梯沒有得到完整的如果我等到它再次按下按鈕到達第一個目的地,它就會有動作!

我明白爲什麼會發生這種情況,但我想知道是否有辦法解決這個問題。我想應該有一些類似於下面的API,我可以在我的代碼末尾折騰:

Pause pause = new Pause(Duration.millis(500)); 
pause.pause(); 

這樣的事情是否存在?你將如何解決我的問題?

+1

你能變量添加到您的translateTransition1。類似於isPlaying,在動畫開始時翻轉爲true,最後翻轉爲false。這樣你可以再次開始動畫之前檢查它是否正在播放。 –

+1

'TranslateTransition'已經有一個['statusProperty'](http://docs.oracle.com/javase/8/javafx/api/javafx/animation/Animation.html#statusProperty),您可以觀察。在動畫運行時,它的值是'RUNNING'。 –

+0

詹姆斯,如果這是一個答案,而不是評論我會選擇它:) –

回答

1

TranslateTransition播放,您可以禁用按鈕:

public void handle(ActionEvent event) { 
    if (event.getSource() == upButton) { 
     //this should all be put into a 'slideNode' method 
     TranslateTransition translateTransition1 = new TranslateTransition(Duration.millis(500), theElevator); 
     translateTransition1.setByX(0); 
     translateTransition1.setByY(-50); 
     translateTransition1.setCycleCount(1); 
     translateTransition1.setAutoReverse(false); 
     translateTransition.statusProperty().addListener((obs, oldStatus, newStatus) -> 
      button.setDisable(newStatus==Animation.Status.RUNNING)); 
     translateTransition1.play(); 
    } 
}