私はJavaFXのに新しいですし、私が見てきたいくつかのチュートリアルでは、いくつかの違いがありました。チュートリアルの一つで、彼は常に使用private
コントローラクラスのアクセス修飾子として、それをこのように書きました:
@FXML private Button button;
しかし、他のチュートリアルでは、常に公共の使用およびコントローラクラスで@FXMLが含まれていませんでした。これらのどちらも、仕事の罰金に思えるが、私が知っておくべきこと、それらの間の実際の違いはありますか?
@FXML
それらはローダによって設定または呼び出すことができるように、先の実施例において、コントローラ部材フィールドとイベントハンドラメソッドがパブリックとして宣言されたことに留意されたいです。コントローラは、一般的に、それを作成するFXMLローダーにのみ表示されますので、実際には、これは、多くの場合、問題ではありません。ただし、コントローラフィールドやハンドラメソッドのためのより制限された可視性を好む開発者のために、
javafx.fxml.FXML
注釈を使用することができます。この注釈はマークFXMLにアクセスできるように保護またはプライベートクラスメンバーを。注釈付きされているクラスは、名前のモジュール内にある場合は、そのクラスを含むモジュールを行う必要がありopen
、少なくともに含むパッケージjavafx.fxml
モジュール。
言い換えれば、@FXML
注釈が専用である必要フィールドやメソッドが非パブリックである場合(つまり、保護されたパッケージ・プライベート、またはプライベート)まだFXMLにアクセスできるようにする必要があります。FXMLのコンテキスト内で、(またはで)ないとパブリックフィールド/メソッドの間に差がない@FXML
前記注釈付き注釈および非パブリックフィールド/メソッドは。一般的に、唯一の違いは、他のコードのフィールド/メソッドの可視性です。
それはそれがために必要として目に見えるようなものを作ることは、一般的にのみにはいい習慣だ、と述べました。FXMLを注射したフィールドは、通常、公開すべき理由はないし、どちらもイベントハンドラメソッド - すばらしいスタイル実装の詳細を行います。
なお、@FXML
注釈は、言語レベルで何も特別な操作を行うことはありません。注釈の存在は、単に伝えFXMLLoader
、それは試してみて、反射的、それは公共のではないにもかかわらず、フィールドやメソッドにアクセスしても大丈夫です。これは、フィールドやメソッドがFXML(例えば、FXMLを注射したフィールドを手動で初期化されていないか、再割り当てされ、実質ん)によって処理されていることも、開発者への良いヒントです。