javafx中并行\顺序转换的动画跳转

javafx中并行\顺序转换的动画跳转,java,animation,javafx,Java,Animation,Javafx,我有一个程序,它一个接一个地运行几个动画,我想添加一个选项来跳到一些动画的末尾,所以我使用了类似这样的方法 Animation anim = ... ; anim.setCurrentTime(anim.getTotalDuration()); anim.play(); 这在大多数情况下都是有效的,但也有一些情况下,特别是涉及并行和顺序转换时,它不起作用。例如,下面是一个代码,用于按顺序淡入一些圆和矩形: public void start(Stage stage) { Pan

我有一个程序,它一个接一个地运行几个动画,我想添加一个选项来跳到一些动画的末尾,所以我使用了类似这样的方法

Animation anim = ... ;
anim.setCurrentTime(anim.getTotalDuration());
anim.play();
这在大多数情况下都是有效的,但也有一些情况下,特别是涉及并行和顺序转换时,它不起作用。例如,下面是一个代码,用于按顺序淡入一些圆和矩形:

public void start(Stage stage) {
        Pane root = new Pane();
        Scene scene = new Scene(root, 500, 500);
        stage.setScene(scene);
        stage.show();        

        int N = 10;
        Circle cir[] = new Circle[N];
        Rectangle rect[] = new Rectangle[N];
        for (int i = 0; i < N; i++) {
            cir[i] = new Circle(10);
            cir[i].relocate(100 + i * 30, 100);
            cir[i].setOpacity(0);
            rect[i] = new Rectangle(20, 20);
            rect[i].relocate(100 + i * 30, 150);
            rect[i].setOpacity(0);

        }
        Button btn = new Button("CLICK");
        root.getChildren().addAll(cir);
        root.getChildren().addAll(rect);
        root.getChildren().addAll(btn);

        btn.setOnAction(evt -> {
            SequentialTransition st1 = new SequentialTransition();
            ObservableList<Animation> kids = st1.getChildren();
            for (int i = 0; i < N; i++) {
                FadeTransition fade1 = new FadeTransition(Duration.millis(200), cir[i]);
                fade1.setFromValue(0);
                fade1.setToValue(1);
                kids.add(fade1);
            }
            SequentialTransition st2 = new SequentialTransition();
            kids = st2.getChildren();
            for (int i = 0; i < N; i++) {
                FadeTransition fade2 = new FadeTransition(Duration.millis(200), rect[i]);
                fade2.setFromValue(0);
                fade2.setToValue(1);
                kids.add(fade2);
            }
            Animation anim = new ParallelTransition(st1, st2);
            anim.jumpTo(anim.getTotalDuration());
            anim.play();
        });

    } 
它确实有效。 不幸的是,这只是因为st1和st2同时结束。例如,如果将fade2更改为持续时间为100而不是200,则只会显示圆圈。当st2结束后跳转到某个持续时间(1000毫秒)时,这是正确的

是否有任何方法可以跳转到动画的某个部分而不出现这些问题?我能想到的唯一解决办法是将速率更改为某个非常大的数字,然后运行动画,使其在屏幕上更新,但即使这样,也只适用于我想一直跳到动画结束的情况

anim.jumpTo(anim.getTotalDuration().subtract(Duration.ONE));