2015-09-11 3 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, которое перевернулось до истины в начале анимации, а затем 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(); 
    } 
} 
Смежные вопросы