回答編集履歴
2
コードを訂正
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
言語仕様についてより正確な書き方に訂正
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
|
|