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

Существует ли такая вещь? Как бы вы решили мою проблему?


person Brent Allard    schedule 11.09.2015    source источник
comment
Можете ли вы добавить переменную в свой файл translateTransition1. Что-то вроде isPlaying, для которого в начале анимации устанавливается значение true, а в конце — значение false. Таким образом, вы можете проверить, воспроизводится ли он, прежде чем снова запускать анимацию.   -  person Joseph Evans    schedule 12.09.2015
comment
TranslateTransition уже имеет statusProperty вы можете наблюдать. Его значение будет RUNNING во время выполнения анимации.   -  person James_D    schedule 12.09.2015
comment
Джеймс, если бы это был ответ, а не комментарий, я бы выбрал его :)   -  person Brent Allard    schedule 12.09.2015


Ответы (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();
    }
}
person James_D    schedule 11.09.2015