回答編集履歴

3

かなり追記

2017/07/13 13:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -27,3 +27,129 @@
27
27
  }
28
28
 
29
29
  ```
30
+
31
+
32
+
33
+ 追記
34
+
35
+ ---
36
+
37
+ 例えば、次のようにすれば、初期化を確実に行うことが出来ます。(かなり省略しています)
38
+
39
+ ```Java
40
+
41
+ public class Kadai06 {
42
+
43
+ // 必要なインスタンスの宣言
44
+
45
+ JLabel jb1; // =null は不要です
46
+
47
+ ...
48
+
49
+
50
+
51
+ public Kadai06() {
52
+
53
+ // ボタンとラベルの初期化
54
+
55
+ jb1 = new JButton();
56
+
57
+ jb1.setText("ボタン");
58
+
59
+ ...
60
+
61
+
62
+
63
+ // パネルの初期化、レイアウト設定
64
+
65
+ cp = new JPanel();
66
+
67
+ cp.setLayout(new GridLayout(1,3));
68
+
69
+ ...
70
+
71
+
72
+
73
+ // フレームの初期化
74
+
75
+ jf = new JFrame();
76
+
77
+ jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
78
+
79
+ ...
80
+
81
+ }
82
+
83
+
84
+
85
+ // ゲッターの実装
86
+
87
+ private JLabel getLabel2() { return jl2; }
88
+
89
+ ...
90
+
91
+
92
+
93
+ // マウスリスナーなどの実装
94
+
95
+ ...
96
+
97
+
98
+
99
+ // メインメソッド
100
+
101
+ public static main(String[] args) {
102
+
103
+ SwingUtilities.invokeLater(new Runnable() {
104
+
105
+ public void run() {
106
+
107
+ Kadai06 application = new Kadai06(); // ここでコンストラクタが呼ばれる
108
+
109
+ application.getJFrame().setVisible(true);
110
+
111
+ }
112
+
113
+ });
114
+
115
+ }
116
+
117
+ }
118
+
119
+ ```
120
+
121
+
122
+
123
+ あと気になるのは、インスタンスの命名に意味合いがないことです。
124
+
125
+ jl, jl1, jl2... **なんのための**ラベルなのか、全く伝わってきません。
126
+
127
+
128
+
129
+ また、リスナークラスの使い方も(初心者なので仕方ないですが)少し荒っぽい印象を受けます。
130
+
131
+ 次のように実装されてはいかがですか。
132
+
133
+ ```Java
134
+
135
+ public class MouseListener extends MouseAdapter
136
+
137
+ {
138
+
139
+ public void mouseEntered(MouseEvent eve) {
140
+
141
+ getJButton().setText("MOUSE_ENTERED");
142
+
143
+ }
144
+
145
+ ...
146
+
147
+ }
148
+
149
+ ```
150
+
151
+
152
+
153
+ ゲッターに無駄な役割がなければ、このような使い方が出来ます。
154
+
155
+ `s`と`s1`も定義しなくて大丈夫ですね。

2

ちょっと加筆

2017/07/13 13:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -12,8 +12,18 @@
12
12
 
13
13
 
14
14
 
15
- `getXX`の役割が大きすぎるのです。
15
+ `getXX`(ゲッターと呼びます)の役割が大きすぎるのです。
16
16
 
17
17
  基本的に、フィールドの初期化はコンストラクタで行うべきです。
18
18
 
19
- `getXX`(ゲッターと呼びます)は、**インスタンスを返すだけ**の役割にしてください。
19
+ ゲッターは、**インスタンスを返すだけ**の役割にしてください。例えば、次のように。
20
+
21
+ ```Java
22
+
23
+ private JLabel getJLabel() {
24
+
25
+ return jl;
26
+
27
+ }
28
+
29
+ ```

1

成形

2017/07/13 11:45

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -14,8 +14,6 @@
14
14
 
15
15
  `getXX`の役割が大きすぎるのです。
16
16
 
17
-
18
-
19
17
  基本的に、フィールドの初期化はコンストラクタで行うべきです。
20
18
 
21
19
  `getXX`(ゲッターと呼びます)は、**インスタンスを返すだけ**の役割にしてください。