【问题标题】:Making listener wait javafx让监听器等待 javafx
【发布时间】:2018-10-28 06:31:03
【问题描述】:

我在这里检查了一些问题,但找不到正确的答案。也许我使用了错误的关键字进行搜索。但我发现并没有帮助。所以这是我的问题。我有一些以某种方式滑动的圆圈和线条。 我想要的是在动画执行后更新平衡变量。

DoubleProperty balance = new SimpleDoubleProperty();

我更新余额如下:

if (shapeADone == false) {
    intersecting = arc.centerXProperty().lessThan(boldLine.getEndX() - 13);
    intersecting.addListener((obs, wasIntersecting, isNowIntersecting) -> {
        System.out.println("Collision!");
        animation1.stop();
        animation2.stop();
        animation3.stop();
    });
    again = true;
    balance.setValue(-1);
} else {
    fadeB();
    balance.setValue(1);
}

但是在 main 方法中我想做这样的事情

level1.balance.addListener(ov -> {
           System.out.println("The new value is " +
                   level1.balance.doubleValue());
           if (level1.balance.getValue()==1) {
              //delay setting scene
               primaryStage.setScene(scene2);
           }
       });

在设置scene2之前我有一些动画要执行,但由于平衡即时更新,我的动画无法执行。 我想知道是否有办法延迟收听平衡或设置场景。 我尝试了 Thread.sleep 和 balance.wait,但它给出了运行时错误。

编辑:这个问题清楚地表明我缺乏关于 javafx 的知识。我想做的很简单,解决方案更简单。当动画执行到最后时,我会更新 balance 的值。我想要的只是确保动画显示到最后。

【问题讨论】:

  • Making listener wait javafx 这基本上就是 listener 的设计目的。
  • 这里只是一个猜测,但运行你的动画。然后在最后/最长运行的动画上使用其onFinish() 方法更新余额。 stackoverflow.com/questions/37752207/…

标签: java javafx delay


【解决方案1】:

这是答案:

else{
                animation3.setOnFinished(event -> balance.setValue(1));
                fadeB();
            }

作为 Sedrick 的评论,我像这样更改代码。 将 setOnFinish 添加到需要执行的动画中可以解决问题。它正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多