回答編集履歴

1

コードの場所

2017/01/04 15:41

投稿

swordone
swordone

スコア20651

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