javafx setOpacity 方法在重复一段时间后不起作用

javafx setOpacity method doesn't work when repeated for some times

我使用线程来更改 AnchorPane 的不透明度。 我添加了一个 onMouseEnter 方法来逐渐提高不透明度,并添加了一个 onMouseExited 方法来逐渐降低不透明度。 我有两个窗格,如果我的鼠标进入其中任何一个,两个窗格都会改变不透明度。 然后我启动我的应用程序,我发现在我的鼠标进入和退出窗格一段时间后,一个会停在特定的不透明度,而另一个仍在逐渐改变不透明度。 我很困惑为什么会这样...... 我的代码是这样的:

private double base = 0.5;

private void changeOpacity(boolean increase){
    new Thread(()-> {
    while((increase && base < 0.9) || ((!increase)&&base > 0.5)){
        base += increase?0.01:-0.01;
        leftPane.setOpacity(base);
        rightPane.setOpacity(base);
        Thread.sleep(5);
    }
}
}

对不起我的英语不好。 谢谢!

您只能在 JavaFX-Thread 上更改 JavaFX 组件的值(您显然不能)。

您需要使用 Platform.runLater(Runnable) 将自己同步回去,但在您的情况下,您会将事件循环与 Runnables 交换,这同样是个坏主意。

正确的方法是:

  • 使用带关键帧的时间轴
  • 为每个节点使用已经预定义的 FadeTransition(连同 ParallelTransition)