回答編集履歴

2

追記

2016/12/25 13:36

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -17,3 +17,49 @@
17
17
 
18
18
 
19
19
  質問コードでは2のクラスで3の役割をやろうとしていますがそれはあまり普通のやりかたではないと思います。普通は3を画面の初期化(例えばJFrameのコンストラクターなど)で行います。
20
+
21
+
22
+
23
+ ---
24
+
25
+
26
+
27
+ 追記:コメントを拝見して感じたのですが、質問者さんはメソッド(非staticメソッド)が特定のインスタンスに対して起動されるものだという点が曖昧なのかも知れませんね。
28
+
29
+
30
+
31
+ ```java
32
+
33
+ class Mouse ... {
34
+
35
+ Mouse() {
36
+
37
+ JPanel panel = ...;
38
+
39
+ // JPanelに対してマウスイベントが起こったときのハンドラーを登録。
40
+
41
+ // JPanelも画面を構成する部品であり、マウスイベントを発生させる機能を持っています。
42
+
43
+ // だからaddMouseListenerが定義されており以下のように登録することができます。
44
+
45
+ panel.addMouseListener(...);
46
+
47
+
48
+
49
+ // 下のコードが誰に対して起動されるメソッド呼び出しなのかが曖昧なのでは?
50
+
51
+ addMouseListener(...);
52
+
53
+ // ==> 上のコードは以下と同じです。これはコンパイルエラーになります。
54
+
55
+ this.addMouseListener(...);
56
+
57
+ }
58
+
59
+ }
60
+
61
+ ```
62
+
63
+ this.addMouseListenerは自分自身(ここではMouseクラスのインスタンス)に対してのメソッド呼び出しです。もしこのメソッドが定義されていたとしたらその意味は「this(あるMouseクラスのインスタンス)からマウスイベントが発生したときのハンドラーを登録する」ということになるでしょう。しかしMouseはイベントハンドラーなのであって、イベントソースになるようなクラスではありません。それゆえにaddMouseListenerというメソッドは定義されてません。定義されてないメソッドは呼び出せないのでコンパイルエラーになります。
64
+
65
+

1

誤字訂正

2016/12/25 13:36

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,4 +1,4 @@
1
- addMouseListenerがこのクラスに定義されていないのがコンパイラうエラーの原因です。
1
+ addMouseListenerがこのクラスに定義されていないのがコンパイエラーの原因です。
2
2
 
3
3
 
4
4