teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2017/02/14 15:50

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -4,4 +4,30 @@
4
4
 
5
5
  <TextArea `fx:id="txtA"` layoutY="48.0" prefHeight="352.0" prefWidth="600.0">
6
6
 
7
- FXMLLoaderはfx:id属性が付与されたノードのインスタンスをみつけると、「コントローラーにある@FXMLアノテーションが付与されていてfx:idの属性値(txtA)と同じ名前のフィールドへ設定する」という具合に動いてくれるのです。
7
+ FXMLLoaderはfx:id属性が付与されたノードのインスタンスをみつけると、「コントローラーにある@FXMLアノテーションが付与されていてfx:idの属性値(txtA)と同じ名前のフィールドへ設定する」という具合に動いてくれるのです。
8
+
9
+ ---
10
+ 追記:
11
+ 指摘できてなかった点がありましたので追記します。FXML上にコントローラークラスのクラス名が書いてあります。それはapplication.SampleControllerとなっていますが、ご質問のコードではtxtAというフィールドがコントローラーではなくアプリケーションクラスに書いてあります。
12
+ コントローラークラス上へtxtAを書いてください。コントローラークラスは次のように書きます。
13
+
14
+ ```Java
15
+ package applicaton;
16
+ public class SampleController implements Initializable {
17
+ @FXML
18
+ TextArea txtA;
19
+
20
+ // FXMLLoaderがFXMLをロードする際にこのクラスのインスタンスを生成します。
21
+ // ロードが完了し、@FXMLアノテーションを付与したフィールドへの設定が完了すると
22
+ // 以下のメソッドが自動的に呼ばれますのでここでさらに必要な初期化などが行えます。
23
+ // (FXML上に書ききれないような追加の初期化)
24
+ @Override
25
+ void initialize(...) {
26
+ コントローラーの初期化
27
+ }
28
+
29
+ ...
30
+ }
31
+ ```
32
+
33
+ このあたりはFXMLを用いたJavaFXの起動処理のお約束ですので一通りチュートリアルをやってみることをお勧めします。ネット上には古い仕様(JavaFXにスクリプトを用いていた時代のもの)があったりしますので本家本元のOracleのチュートリアルや新しい日付の記事を選んで参照することをお勧めします。

1

説明文を訂正

2017/02/14 15:50

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
  <TextArea `fx:id="txtA"` layoutY="48.0" prefHeight="352.0" prefWidth="600.0">
6
6
 
7
- FXMLLoaderはfx:id属性の値のtxtAを「コントローラーにある@FXMLアノテーションが付与されtxtAという名前のフィールドへ設定する」という具合に動いてくれるのです。
7
+ FXMLLoaderはfx:id属性が付与されたノードインスタンスみつけると、「コントローラーにある@FXMLアノテーションが付与されていてfx:idの属性値(txtA)同じ名前のフィールドへ設定する」という具合に動いてくれるのです。