質問編集履歴
3
例のコードを記載しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,77 +12,109 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
+
下の例はキーを押すとを色が変わるように変更したものです。
|
16
|
+
|
17
|
+
`add(p2);`を抜いて実行すると色が変わりますが、`add(p2);`を抜かずに実行すると反応しません。その代わり`JButton`が反応するようになります。
|
18
|
+
|
15
|
-
### ソースコード
|
19
|
+
### ソースコード
|
16
20
|
|
17
21
|
```
|
18
22
|
|
23
|
+
import javax.swing.*;
|
24
|
+
|
25
|
+
import java.awt.*;
|
26
|
+
|
27
|
+
import java.awt.event.*;
|
28
|
+
|
29
|
+
public class Game extends JFrame implements KeyListener, ActionListener{
|
30
|
+
|
31
|
+
public static void main(String[] args){
|
32
|
+
|
33
|
+
Game cl = new Game();
|
34
|
+
|
35
|
+
cl.setVisible(true);
|
36
|
+
|
37
|
+
}
|
38
|
+
|
39
|
+
JPanel p1;
|
40
|
+
|
41
|
+
Game(){
|
42
|
+
|
43
|
+
setTitle("Game");
|
44
|
+
|
45
|
+
setSize(214,437);//200+14,400+37
|
46
|
+
|
47
|
+
setResizable(false);
|
48
|
+
|
49
|
+
setLocationRelativeTo(null);
|
50
|
+
|
51
|
+
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
52
|
+
|
53
|
+
setAlwaysOnTop(true);//常に前面
|
54
|
+
|
55
|
+
setLayout(null);
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
p1 = new JPanel();
|
60
|
+
|
61
|
+
p1.setBounds(0,0,200,200);
|
62
|
+
|
63
|
+
p1.setBackground(Color.WHITE);
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
JPanel p2 = new JPanel();
|
68
|
+
|
69
|
+
p2.setBounds(0,200,200,200);
|
70
|
+
|
71
|
+
p2.setLayout(new GridLayout(1,2));
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
JButton[] btn = new JButton[2];
|
76
|
+
|
77
|
+
for(int i=0;i<2;i++){
|
78
|
+
|
79
|
+
btn[i] = new JButton(String.valueOf(i));
|
80
|
+
|
81
|
+
btn[i].addActionListener(this);
|
82
|
+
|
83
|
+
btn[i].setActionCommand(String.valueOf(i));
|
84
|
+
|
85
|
+
p2.add(btn[i]);
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
add(p1);
|
92
|
+
|
93
|
+
add(p2);
|
94
|
+
|
95
|
+
addKeyListener(this);
|
96
|
+
|
97
|
+
}
|
98
|
+
|
19
|
-
|
99
|
+
@Override
|
20
100
|
|
21
101
|
public void actionPerformed(ActionEvent e) {
|
22
102
|
|
23
|
-
Strin
|
103
|
+
System.out.println("JButtonが押されました");
|
24
|
-
|
25
|
-
switch(Integer.parseInt(cmd)){
|
26
|
-
|
27
|
-
case 0:
|
28
|
-
|
29
|
-
runGame=false;
|
30
|
-
|
31
|
-
break;
|
32
|
-
|
33
|
-
case 1:
|
34
|
-
|
35
|
-
runGame=true;
|
36
|
-
|
37
|
-
break;
|
38
|
-
|
39
|
-
case 2:
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
break;
|
44
|
-
|
45
|
-
}
|
46
104
|
|
47
105
|
}
|
48
106
|
|
49
|
-
|
50
|
-
|
51
107
|
@Override
|
52
108
|
|
53
|
-
public void keyTyped(KeyEvent e){
|
109
|
+
public void keyTyped(KeyEvent e){}
|
54
110
|
|
55
111
|
@Override
|
56
112
|
|
57
113
|
public void keyPressed(KeyEvent e){/*キーを入力した際の処理*/
|
58
114
|
|
59
|
-
s
|
115
|
+
p1.setBackground(Color.BLACK);
|
60
116
|
|
61
|
-
|
117
|
+
System.out.println("Keyが押されました");
|
62
|
-
|
63
|
-
p.setCourse(0,-1,1);
|
64
|
-
|
65
|
-
break;
|
66
|
-
|
67
|
-
case KeyEvent.VK_DOWN://下キー 下移動
|
68
|
-
|
69
|
-
p.setCourse(0,1,3);
|
70
|
-
|
71
|
-
break;
|
72
|
-
|
73
|
-
case KeyEvent.VK_LEFT://左キー 左移動
|
74
|
-
|
75
|
-
p.setCourse(-1,0,0);
|
76
|
-
|
77
|
-
break;
|
78
|
-
|
79
|
-
case KeyEvent.VK_RIGHT://右キー 右移動
|
80
|
-
|
81
|
-
p.setCourse(1,0,2);
|
82
|
-
|
83
|
-
break;
|
84
|
-
|
85
|
-
}
|
86
118
|
|
87
119
|
}
|
88
120
|
|
@@ -90,39 +122,7 @@
|
|
90
122
|
|
91
123
|
public void keyReleased(KeyEvent e){}
|
92
124
|
|
93
|
-
void giveBait(){
|
94
|
-
|
95
|
-
if((p.swing_x%p.SIZE==0 && p.swing_y%p.SIZE==0) || ((p.mx+p.gx*p.SPEED/p.SIZE)==0 && (p.my+p.gy*p.SPEED/p.SIZE)==0)){
|
96
|
-
|
97
|
-
if(bait[p.swing_x/p.SIZE][p.swing_y/p.SIZE]!=null){
|
98
|
-
|
99
|
-
bait[p.swing_x/p.SIZE][p.swing_y/p.SIZE].removeAll();
|
100
|
-
|
101
|
-
bait[p.swing_x/p.SIZE][p.swing_y/p.SIZE]=null;
|
102
|
-
|
103
|
-
baitCount++;
|
104
|
-
|
105
|
-
if(baitCount==199){
|
106
|
-
|
107
|
-
message("Game Clear");
|
108
|
-
|
109
|
-
finalRunGame=false;
|
110
|
-
|
111
|
-
|
125
|
+
}
|
112
|
-
|
113
|
-
if((p.swing_x/p.SIZE==1||p.swing_x/p.SIZE==STAGE_X-2)&&(p.swing_y/p.SIZE==1||p.swing_y/p.SIZE==STAGE_Y-2)){
|
114
|
-
|
115
|
-
p.dashCount=0;
|
116
|
-
|
117
|
-
p.dash=true;
|
118
|
-
|
119
|
-
}
|
120
|
-
|
121
|
-
}
|
122
|
-
|
123
|
-
}
|
124
|
-
|
125
|
-
}
|
126
126
|
|
127
127
|
```
|
128
128
|
|
2
修正しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
現在一つの`JFrame`の中に二つの`JPanel`を入れ片方には
|
3
|
+
現在一つの`JFrame`の中に二つの`JPanel`を入れ片方には矢印キーを押すこと(`KeyListener`)で画像が矢印に沿って動き、もう片方には特に何もないただの`JPanel`になっています。この時は問題なく矢印キーを入力すると画像が動きますが、もう一つの`JPanel`の方に`JButton`を設置し、ボタンを押すと(`ActionListener`)文字が表示されるようにすると、`JButton`のボタンを押すと文字は出てくれるのですが、矢印キーを押しても画像が動きません。
|
4
4
|
|
5
5
|
これは一つのクラスで`implements KeyListener, ActionListener`を使って、二つ実装しています。
|
6
6
|
|
1
ソースコードを少し加えました
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,6 +12,122 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
+
### ソースコードの一部
|
16
|
+
|
17
|
+
```
|
18
|
+
|
19
|
+
@Override
|
20
|
+
|
21
|
+
public void actionPerformed(ActionEvent e) {
|
22
|
+
|
23
|
+
String cmd = e.getActionCommand();
|
24
|
+
|
25
|
+
switch(Integer.parseInt(cmd)){
|
26
|
+
|
27
|
+
case 0:
|
28
|
+
|
29
|
+
runGame=false;
|
30
|
+
|
31
|
+
break;
|
32
|
+
|
33
|
+
case 1:
|
34
|
+
|
35
|
+
runGame=true;
|
36
|
+
|
37
|
+
break;
|
38
|
+
|
39
|
+
case 2:
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
break;
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
@Override
|
52
|
+
|
53
|
+
public void keyTyped(KeyEvent e){/*何かのキー(aなど)を押した場合の処理*/}
|
54
|
+
|
55
|
+
@Override
|
56
|
+
|
57
|
+
public void keyPressed(KeyEvent e){/*キーを入力した際の処理*/
|
58
|
+
|
59
|
+
switch(e.getKeyCode()){
|
60
|
+
|
61
|
+
case KeyEvent.VK_UP://上キー 上移動
|
62
|
+
|
63
|
+
p.setCourse(0,-1,1);
|
64
|
+
|
65
|
+
break;
|
66
|
+
|
67
|
+
case KeyEvent.VK_DOWN://下キー 下移動
|
68
|
+
|
69
|
+
p.setCourse(0,1,3);
|
70
|
+
|
71
|
+
break;
|
72
|
+
|
73
|
+
case KeyEvent.VK_LEFT://左キー 左移動
|
74
|
+
|
75
|
+
p.setCourse(-1,0,0);
|
76
|
+
|
77
|
+
break;
|
78
|
+
|
79
|
+
case KeyEvent.VK_RIGHT://右キー 右移動
|
80
|
+
|
81
|
+
p.setCourse(1,0,2);
|
82
|
+
|
83
|
+
break;
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
@Override
|
90
|
+
|
91
|
+
public void keyReleased(KeyEvent e){}
|
92
|
+
|
93
|
+
void giveBait(){
|
94
|
+
|
95
|
+
if((p.swing_x%p.SIZE==0 && p.swing_y%p.SIZE==0) || ((p.mx+p.gx*p.SPEED/p.SIZE)==0 && (p.my+p.gy*p.SPEED/p.SIZE)==0)){
|
96
|
+
|
97
|
+
if(bait[p.swing_x/p.SIZE][p.swing_y/p.SIZE]!=null){
|
98
|
+
|
99
|
+
bait[p.swing_x/p.SIZE][p.swing_y/p.SIZE].removeAll();
|
100
|
+
|
101
|
+
bait[p.swing_x/p.SIZE][p.swing_y/p.SIZE]=null;
|
102
|
+
|
103
|
+
baitCount++;
|
104
|
+
|
105
|
+
if(baitCount==199){
|
106
|
+
|
107
|
+
message("Game Clear");
|
108
|
+
|
109
|
+
finalRunGame=false;
|
110
|
+
|
111
|
+
}
|
112
|
+
|
113
|
+
if((p.swing_x/p.SIZE==1||p.swing_x/p.SIZE==STAGE_X-2)&&(p.swing_y/p.SIZE==1||p.swing_y/p.SIZE==STAGE_Y-2)){
|
114
|
+
|
115
|
+
p.dashCount=0;
|
116
|
+
|
117
|
+
p.dash=true;
|
118
|
+
|
119
|
+
}
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
}
|
124
|
+
|
125
|
+
}
|
126
|
+
|
127
|
+
```
|
128
|
+
|
129
|
+
|
130
|
+
|
15
131
|
### 補足情報(FW/ツールのバージョンなど)
|
16
132
|
|
17
133
|
java version "16.0.1" 2021-04-20
|