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

Ran*_*pto 1 javafx cursor fadeout javafx-8

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

我也试过使用线程.

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

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

以两种方式延迟后,我可以通过哪种方式淡出光标?

Jam*_*s_D 5

您的代码正在使UI挂起,因为您Thread.sleep(...)在FX应用程序线程上进行了阻塞调用().如果你想这样做,你应该阻止后台线程,并在暂停完成时安排FX应用程序线程上光标的更改.

但是,更简单的方法就是使用PauseTransition:

PauseTransition pause = new PauseTransition(Duration.seconds(2));
pause.setOnFinished(e -> scene.setCursor(Cursor.NONE));
pause.play();
Run Code Online (Sandbox Code Playgroud)

您也可以使用它来在用户执行某些操作时重新显示光标,并在2秒后再次消失:

scene.addEventHandler(MouseEvent.ANY, e -> {
    scene.setCursor(Cursor.DEFAULT);
    pause.playFromStart();
});
Run Code Online (Sandbox Code Playgroud)