回答編集履歴

2

コードを訂正

2017/10/18 00:59

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -28,29 +28,11 @@
28
28
 
29
29
 
30
30
 
31
- 画面の初期化の際にやればよいので、OkButtonActionListenerという名前付きの内部クラスを定義する必要は必ずしもないです。
31
+ 画面の初期化の際にやればよいので、OkButtonActionListenerという名前付きの内部クラスを定義する必要は必ずしもないです。またボタンが押されたときにやるべきことだけをハンドラーメソッドの中に書くようにします。
32
32
 
33
33
 
34
34
 
35
-
36
-
37
- ```
35
+ ```java
38
-
39
- ...
40
-
41
- frame.setVisible(true);
42
-
43
- class OkButtonActionListener implements ActionListener{
44
-
45
- ...
46
-
47
- }
48
-
49
-
50
-
51
- // ではなく次のように書くべき
52
-
53
-
54
36
 
55
37
  frame.setVisible(true);
56
38
 
@@ -75,3 +57,39 @@
75
57
 
76
58
 
77
59
  元々のコードにあるメソッド定義が書いてないので本来はどういう動きにしたかったのか質問文だけからはわかりませんでした。上記は単にtextFiled1に入力されている文字列をボタンを押した時になんらかの方法で変換し、その結果をtextField2へ設定する例です。
60
+
61
+
62
+
63
+ もしこのハンドラーが呼び出される度に(ボタンが押される度に)異なることをさせるといった場合、ActionListenerのフィールドとして状態を覚えておくこともできます。例えば1回目にボタンを押したらtextField1の最初の文字をtextField2へ表示、2回目は2番目の文字、・・・とするような場合次のように書けます。
64
+
65
+
66
+
67
+ ```java
68
+
69
+ frame.setVisible(true);
70
+
71
+ button1.addActionListener(new ActionListener() {
72
+
73
+ int pos = 0; // これはローカル変数ではなくフィールド定義であることに注意
74
+
75
+
76
+
77
+ @Override
78
+
79
+ public void actionPerformed(ActionEvent e) {
80
+
81
+ String s = textField1.getText();
82
+
83
+ if (s.isEmpty()) return;
84
+
85
+ pos = pos % s.length();
86
+
87
+ textField2.setText(String.format("char at %d is %s", pos, s1.charAt(pos)));
88
+
89
+ pos++;
90
+
91
+ }
92
+
93
+ });
94
+
95
+ ```

1

言語仕様についてより正確な書き方に訂正

2017/10/18 00:59

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- OkButtonActionListenerのクラス定義本体は内部クラスでないクラスと同様、定義本体のトップレベルにはフィールド定義メソッド定義しか書けせん
7
+ OkButtonActionListenerのクラス定義本体は内部クラスでないクラスと同様、定義本体のトップレベルにはフィールド定義メソッド定義、初期化ブロック等々記述できるものが決っています
8
8
 
9
9
 
10
10
 
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- は言語仕様的に表現すると文(より正確にはexpression statement)です。文はメソッド本体にしか書けませんのでコンパイルエラーとなります。
15
+ は言語仕様的に表現すると文(より正確にはexpression statement)です。文はクラスの定義本体のトップレベル書けませんのでコンパイルエラーとなります。
16
16
 
17
17
 
18
18