几秒钟延迟后 JavaFX 中的淡出光标
Fadeout Cursor in JavaFX After Few Seconds Delay
在我的应用程序(媒体播放器)上,当应用程序处于全屏模式时,我正在淡出顶部栏和底部栏。我还想在延迟几秒钟后淡出光标。我试过 FadeTransition
,但它只需要 Node
作为参数。
我也试过用thread。
Platform.runLater(new Runnable()
{
@Override
public void run()
{
try
{
Thread.sleep(2000);
scene.setCursor(Cursor.NONE);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
});
这里我只是想在延迟两秒后隐藏光标。它有效,但也让我的应用程序挂起两秒钟,这出乎我的意料。
延迟两秒后光标淡出有什么方法?
您的代码使 UI 挂起,因为您正在 FX 应用程序线程上进行阻塞调用 (Thread.sleep(...)
)。如果你想那样做,你应该在后台线程上阻塞,并在暂停完成时安排在 FX 应用程序线程上更改光标。
不过,更简单的方法是使用 PauseTransition
:
PauseTransition pause = new PauseTransition(Duration.seconds(2));
pause.setOnFinished(e -> scene.setCursor(Cursor.NONE));
pause.play();
您也可以使用它来使光标在用户执行某些操作时重新出现,并在 2 秒后再次消失:
scene.addEventHandler(MouseEvent.ANY, e -> {
scene.setCursor(Cursor.DEFAULT);
pause.playFromStart();
});
在我的应用程序(媒体播放器)上,当应用程序处于全屏模式时,我正在淡出顶部栏和底部栏。我还想在延迟几秒钟后淡出光标。我试过 FadeTransition
,但它只需要 Node
作为参数。
我也试过用thread。
Platform.runLater(new Runnable()
{
@Override
public void run()
{
try
{
Thread.sleep(2000);
scene.setCursor(Cursor.NONE);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
});
这里我只是想在延迟两秒后隐藏光标。它有效,但也让我的应用程序挂起两秒钟,这出乎我的意料。
延迟两秒后光标淡出有什么方法?
您的代码使 UI 挂起,因为您正在 FX 应用程序线程上进行阻塞调用 (Thread.sleep(...)
)。如果你想那样做,你应该在后台线程上阻塞,并在暂停完成时安排在 FX 应用程序线程上更改光标。
不过,更简单的方法是使用 PauseTransition
:
PauseTransition pause = new PauseTransition(Duration.seconds(2));
pause.setOnFinished(e -> scene.setCursor(Cursor.NONE));
pause.play();
您也可以使用它来使光标在用户执行某些操作时重新出现,并在 2 秒后再次消失:
scene.addEventHandler(MouseEvent.ANY, e -> {
scene.setCursor(Cursor.DEFAULT);
pause.playFromStart();
});