2017-03-06 7 views
1

いいえ、私は初めてのJFXアプリケーションを持っています。&実行中です。JavaFX:要素/コントロールがインスタンス化される時期/場所

今、私はすべてがうまくどのようにシーンの後ろに巻き込まれているのか自分自身に尋ねています。 FXMLのこの束は、どのようにして適切なインスタンス化とすべてのJavaコードに変換されますか?どのように機能するのですか?

私は何を書くべきか分かっていたが、それまではどのように使用するかについて多くのことを知っていたが、それがどのように作られているかについてはほとんど分かっていなかった。

+1

Javaコードに変換されません。 'FXMLLoader'は実行時にFXMLファイルを読み込み、リフレクションを介してオブジェクトを作成します。 –

+0

[この説明](http://stackoverflow.com/documentation/javafx/1580/fxml-and-controllers/5125/example-fxml#t=201703061335279244705)が役立つかどうかを確認してください。 –

答えて

1

魔法はFXMLLoaderの内部で起こります。

FXMLファイルを受け取り、それをXMLパーサーで解析します。明確に定義された一連のXMLノードを使用することを余儀なくされ、ローダーは実行時にこれらのXMLノードのすべてのタイプを対応するJavaオブジェクト(JavaFX Node)に「変換」する方法を知っています。 XMLファイルの形式が正しくない(定義された構造に適合しない)場合、例外が発生します。このようにしてノードが作成され、残ったものが1つ残っています。

コントローラーを作成するには、リフレクションを使用して、指定されたコントローラークラスのインスタンスを作成し、データメンバーを設定します。 @FXMLの内部フィールドを繰り返し処理し、それぞれを一致するfx:id属性を持つ作成されたオブジェクトの1つに設定します。

最後に、デフォルトでは、コントローラのインスタンスでpublic initializeメソッドが呼び出されます。

+0

ありがとうございます。これは今私にとってははるかに明確です –

関連する問題