顺序转换中间的过程代码-JavaFX

顺序转换中间的过程代码-JavaFX,javafx,Javafx,我试图执行顺序转换,但在动画之间,我需要执行一些命令 我的问题是,它总是在执行节点上传递的最后一个命令。有办法解决这个问题吗 其中is“is ignored”是我需要在第一个动画中执行的代码,那么这里的“is executed”是我需要在第二个动画中执行的代码 谢谢 private void startAnimation(){ vb_adv.setPrefWidth(197); ap_services.toBack();// Is ignored vb_adv.toFr

我试图执行顺序转换,但在动画之间,我需要执行一些命令

我的问题是,它总是在执行节点上传递的最后一个命令。有办法解决这个问题吗

其中is“is ignored”是我需要在第一个动画中执行的代码,那么这里的“is executed”是我需要在第二个动画中执行的代码

谢谢

private void startAnimation(){

    vb_adv.setPrefWidth(197);
    ap_services.toBack();// Is ignored
    vb_adv.toFront();// Is ignored
    ScaleTransition expandAdvertising = new ScaleTransition(Duration.millis(2000), vb_adv);
    expandAdvertising.setToX(2);
    expandAdvertising.setCycleCount(2);
    expandAdvertising.setAutoReverse(true);

    ap_services.setPrefWidth(124);
    ap_services.toFront();//is executed
    ScaleTransition expandService = new ScaleTransition(Duration.millis(2000), ap_services);
    expandService.setDelay(Duration.seconds(3));
    expandService.setToX(3.7);
    expandService.setCycleCount(2);
    expandService.setAutoReverse(true);

    SequentialTransition sequence = new SequentialTransition(expandAdvertising, expandService);

    sequence.play();
}

在当前代码中,您将
ap_services
移动到z顺序的后面,将
vb_adv
移动到前面:

ap_services.toBack();
vb_adv.toFront();
ap_services.toFront();
然后创建并设置您的
ScaleTransition
。注意,完成这一部分基本上不需要时间;您所做的只是配置稍后将运行的动画

您要做的下一件事是将ap\U服务移动到前面:

ap_services.toBack();
vb_adv.toFront();
ap_services.toFront();
请注意,这基本上会在前面调用
toFront()
toBack()
之后立即发生,当然这会抵消这些调用的效果。因此,您的初始调用实际上是执行的(而不是“忽略”),但您立即执行了某些操作,从而取消了它们的效果

您真正想要的是在
ScaleTransition
完成后执行
ap\u services.toFront()
。您可以通过将该调用放入
onFinished()
处理程序来完成此操作:

// ap_services.toFront();
expandAdvertising.setOnFinished(e -> ap_services.toFront());

你能澄清一下吗?当您说“在第一个动画中执行的代码”时,您的意思是希望在第一个动画开始之前执行该代码吗?然后在第一个动画结束,第二个动画即将开始时执行
ap\u services.toFront()
?如果你能创建一个新的问题并将其发布在问题中,这也会非常有帮助。作为旁注,请学习并使用适当的方法。如果你不遵守这些,其他程序员阅读你的代码是非常困难的。确切地说,请按照图中的说明进行说明。首先执行动画2(expandAdvertising),然后执行图像动画1(expandService)。但是,当执行动画1时,它必须在屏幕前面,否则动画将在组件2后面执行。同样,当它是另一种方式时,我需要任何正在运行的东西都在屏幕前面。但是在运行时它只执行动画的最后一个命令,这正是我所需要的。非常感谢您的帮助,并为代码感到抱歉,我将重写它。再次感谢。我在StackOverflow上没有发现另一个问题:我可以在执行autoReverse命令之前暂停动画吗?@KelvynCavalcante不能使用
ScaleTransition
。但是你可以,例如,使用一个
时间轴
,有两个具有不同时间点和相同端点的关键帧用于缩放。让我看看我是否理解,然后我是否必须创建一个时间轴,其中一个关键帧用于展开,另一个关键帧用于在一个动画和另一个动画之间收缩我设置开始/结束时间?我想你只需要三个关键帧;一个具有时间0、键值
vb\u adv.scaleProperty()
和1,一个具有时间2秒、键值
vb\u adv.scaleProperty()
和2,一个具有时间2.2秒和相同键值。然后像以前一样将
autoReverse
设置为true,以此类推。