几秒钟延迟后,JavaFX中的淡出光标

时间:2016-09-25 14:32:16

标签: javafx cursor javafx-8 fadeout

在我的应用程序(媒体播放器)上,当应用程序处于全屏模式时,我正在淡出顶部栏和底栏。我也想在延迟几秒后淡出光标。我尝试了FadeTransition,但仅将Node作为参数。

我也尝试过使用线程。

    Platform.runLater(new Runnable()
    {
        @Override
        public void run()
        {
            try
            {
                Thread.sleep(2000);
                scene.setCursor(Cursor.NONE);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }

        }
    });

这里我只想在延迟两秒后隐藏光标。它有效,但也挂了我的应用程序两秒钟,我不指望。

以这种方式我可以在延迟两秒后淡出光标?

1 个答案:

答案 0 :(得分:5)

您的代码正在使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();
});