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

时间:2017-01-24 13:05:17

标签: javafx opacity

我使用Thread来改变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);
    }
}
}

我很抱歉我的英语不好。 谢谢!

1 个答案:

答案 0 :(得分:1)

您只能在使用JavaFX-Thread时更改JavaFX组件的值(显然不是这样)。

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

正确的方法是:

  • 将时间轴与KeyFrame一起使用
  • 使用已预定义的FadeTransition foreach节点(连同ParallelTransition)