2016-05-08 4 views
0

NodesをJavaFXの画面にレンダリングする方法と、JavaFxでカスタムコントロールを作成するときに、このプロセスをトリガする要素を理解しようとしています。私はAndroidのViewクラスを使っていて、JavaFXでシーングラフを描くのとは違って、Viewの描画が違う経験があります。JavaFxでシーングラフのレンダリングを実行またはトリガーする方法

例えば、AndroidではカスタムViewを作成し、onDraw(Canvas canvas)メソッドを上書きすることができます。 onDraw()では、ディレクトリをCanvasオブジェクトに描画することで、すべての描画要件を満たすことができます。メソッドがUIスレッドで呼び出され、onDrawが完了すると、キャンバスが自動的に表示されます。 GUIスレッドの場合は、ビューのinvalidate()メソッドを呼び出すか、そうでない場合はpostInvalidate()を呼び出すことによって、いつでもビューの再描画をトリガーできます。

JavaFxでは、私はCanvasオブジェクトではなくNodeオブジェクトを使用していますが、私が知っている限りonDraw()に相当するものはありません。したがって、カスタムコントロールを作成している場合、Controlクラスを拡張し、SkinBaseを拡張するクラスを作成します。 SkinBaseクラスは、さまざまなNodeオブジェクトを作成することによってカスタムコントロールの「ルック」を作成する場所です。しかし、次に:

  1. 実際にノードオブジェクトをレンダリングするにはどうすればよいですか?
  2. ノードの1つのプロパティを変更する必要がある場合はどうすればよいですか?その の色?
  3. スキンを無効にして、 をGUIまたは別のスレッドから再レンダリングする方法はありますか?

私はAndroidのViewクラスがどのように動作しているかを知りたいと思いますが、これはAndroidとJavaFxのレンダリングプロセスがどのように動作するのかを混乱させる危険があります。

+0

[Oracleによるマニュアル](https://docs.oracle.com/javafx/2/architecture/jfxpub-architecture.htm)を参照してください。 – hotzst

+0

ここにカスタムコントロールを作成するためのチュートリアルがあります:http://www.guigarage.com/2012/11/custom-ui-controls-with-javafx-part-1/ – jns

答えて

1
  1. 何もありません:ノードはシーングラフの一部であると、FXレンダリングシステムは彼らに再び
  2. 、何をレンダリングします。 JavaFXにはobservable properties APIがあります。外観に影響を与えるノードのプロパティは、これらの観察可能なプロパティによって表されます。したがって、プロパティが変更された場合、変更が観察され、FXレンダリングシステムは次のレンダリングパルスでノードを再レンダリングすることを認識します。
  3. これは、FXアプリケーションスレッドから行う必要があります。 2.と同様に、プロパティの値を変更するだけで、ノード(および結果としてシーングラフの祖先ノード)が自動的に無効になります。ここでも、シーングラフの一部であるノードの変更はFXアプリケーションスレッドでになる必要があります。 Platform.runLater(...)を使用して、バックグラウンドスレッドからFXアプリケーションスレッドで実行するコードをスケジュールすることができます(またはJavaFX concurrency APIを使用)。
+0

残念ながら私はまだそれを理解していません。私は 'SkinBase'に含まれているいくつかのNodeオブジェクトで構成されたカスタムコントロールを作成しようとしていますが、' Node'は観測できませんので、NodeにJavaFX GUIスレッドがどのように通知されますか?私は、GUIスレッドがJavaFXで何をしているのかの説明を探していると思います。変化を探しているシーンツリーを絶えず横断していますか?私はAndoridがhttp://developer.android.com/training/custom-views/custom-drawing.htmlを描画するのと同等のものを必要としますが、JavaFxの場合は必要です。 – Kerry

+0

@Kerry:IIUCでは、[pulse](https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1107438)メカニズムを探している可能性があります。 – trashgod

関連する問題