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

回答編集履歴

1

コードの場所

2017/01/04 15:41

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,2 +1,29 @@
1
1
  そこはstartメソッドの中ではなく、**匿名クラスEventHandlerの中**です。
2
- 最初の方はクラスの中の「フィールド変数の宣言及び初期化」が出来る場所で何かそれ以外のメソッドを書いたのでは?
2
+ 最初の方はクラスの中の「フィールド変数の宣言及び初期化」が出来る場所で何かそれ以外のメソッドを書いたのでは?
3
+
4
+ setOnActionに渡している以下の部分
5
+ ```java
6
+ new EventHandler<ActionEvent>() {
7
+ /* 略 */
8
+ }
9
+ ```
10
+ は、匿名クラスという書き方であり、クラスを記述しています。つまりここの部分は、次のようなクラスをその場で作成し、
11
+ ```java
12
+ class Hoge implements EventHandler<ActionEvent> {
13
+
14
+ //A
15
+
16
+ @Override
17
+ public void handle(ActionEvent event) {
18
+ //B
19
+ }
20
+
21
+ }
22
+ ```
23
+ setOnActionに
24
+ ```java
25
+ setOnAction(new Hoge());
26
+ ```
27
+ のように渡していることになるのです。
28
+
29
+ さて本題ですが、エラーが出ているコードは、エラーが出ているコードを「A」の場所に書いている状態になります。この場所は**フィールド変数の宣言およびその初期化**のみ可能で、それ以外の変数への代入やメソッドの実行はできません。エラーが出ていない後者のコードは、メソッド内の「B」に書いているため問題ないのです。