2016-09-25 6 views
1

アプリケーションがフルスクリーンモードになっているときに、トップバーとボトムバーがフェードアウトしています。私はまた数秒遅れてカーソルをフェードアウトさせたい。私はFadeTransitionを試しましたが、パラメータとしてはNodeしかかかりません。JavaFXのフェードアウトカーソル数秒後に遅延

スレッドを使用しても試みました。

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

     } 
    }); 

ここでは、2秒後にカーソルを非表示にしたかっただけです。それは動作しますが、期待していない2秒間アプリケーションを停止します。

どのようにして2秒後にカーソルをフェードアウトできますか?

+1

不透明度については、異なる不透明度を持つ同じカーソルの10種類のアイコンを作成することが可能かもしれません。非常に速く、例えばImageCursorを使用して1秒間に1つずつ変更します。 、多分私はそれを行い、コードを投稿します。:) – GOXR3PLUS

+1

ここにあります:https://github.com/goxr3plus/JFXCustomCursor – GOXR3PLUS

+0

ありがとう、私はあなたのプロジェクトを見て、それは本当にいいです:) –

答えて

5

FXアプリケーションスレッドでブロッキングコール(Thread.sleep(...))を行っているため、コードでUIがハングしています。このようにするには、バックグラウンドスレッドをブロックし、一時停止が完了したときに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(); 
}); 
+0

ありがとう、第2部分は私のために特別な利点を追加しました。 さらに、カーソルをフェードアウトさせる手助けもできます。徐々に消えたらいいですか。 –

+0

私はそれを行う方法が表示されません。 'Cursor'には' opacity'プロパティはありません。 'Node'から' Cursor'を作成する方法はないと思います。 –

+0

@James_D私は画像を透明にするために 'WritableImage'と一緒に' PixelWriter'を使用していますが、代わりに黒い四角形を取得しています...どうしてですか? 'WritableImage'は透明をサポートしていません。 – GOXR3PLUS

関連する問題