Я просто работал с анимацией и понял проблему.Когда я попытался удалить дочерний элемент из родительского объекта после анимации, он не работал.
FadeTransition needRestartBoxFadeOut = new FadeTransition(Duration.millis(200));
needRestartBoxFadeOut.setFromValue(1);
needRestartBoxFadeOut.setToValue(0);
needRestartBoxFadeOut.setNode(needRestartBox);
needRestartBoxFadeOut.setAutoReverse(true);
needRestartBoxFadeOut.setCycleCount(1);
needRestartBoxFadeOut.setOnFinished(e -> removeNeedRestartBox());
(removeNeedRestartBox () просто удаляет needRestartBox из родительского элемента)
Как удалить дочерний элемент изродитель после анимации?
Спасибо за помощь и извините за мой плохой английский!
РЕДАКТИРОВАТЬ: У меня есть расширенный класс StackPane, который является родителем в этом случае.
//in constructor
Timeline needRestartBoxAnimation = new Timeline();
needRestartBoxAnimation.getKeyFrames().add(new KeyFrame(Duration.millis(200), new KeyValue(needRestartBoxHeight, 100.0)));
FadeTransition needRestartBoxFadeOut = new FadeTransition(Duration.millis(200));
needRestartBoxFadeOut.setFromValue(1);
needRestartBoxFadeOut.setToValue(0);
needRestartBoxFadeOut.setNode(needRestartBox);
needRestartBoxFadeOut.setAutoReverse(true);
needRestartBoxFadeOut.setCycleCount(1);
needRestartBoxFadeOut.setOnFinished(e -> removeNeedRestartBox());
//show method
private void showNeedRestart(){
needRestartBox.setMaxHeight(0);
getChildren().add(needRestartBox);
needRestartBoxAnimation.play();
}
//dispose method
private void disposeNeedRestart(){
needRestartBoxFadeOut.play();
}
//remove child method
public void removeNeedRestartBox() {
getChildren().remove(needRestartBox);
}
Анимация временной шкалы не запускается, пока родительскийЭто содержит NeedRestartBox.Таким образом, основная проблема заключается в том, что FadeTransition не удаляет needRestartBox.
Я могу прислать вам весь класс, если хотите.
РЕДАКТИРОВАТЬ 2:
Теперь ребенок удаляется правильно, но что-то не работает.Если я не использую переход затухания, это работает хорошо.
//working dispose method:
private void disposeNeedRestart(){
removeNeedRestartBox();
}
//not working dispose method:
private void disposeNeedRestart(){
needRestartBoxFadeOut.play();
}