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)
我使用线程来更改 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)