質問編集履歴

3

例のコードを記載しました。

2021/05/31 07:13

投稿

cretter
cretter

スコア91

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
- @Override
99
+ @Override
20
100
 
21
101
  public void actionPerformed(ActionEvent e) {
22
102
 
23
- String cmd = e.getActionCommand();
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){/*何かのキー(aなど)を押した場合の処理*/}
109
+ public void keyTyped(KeyEvent e){}
54
110
 
55
111
  @Override
56
112
 
57
113
  public void keyPressed(KeyEvent e){/*キーを入力した際の処理*/
58
114
 
59
- switch(e.getKeyCode()){
115
+ p1.setBackground(Color.BLACK);
60
116
 
61
- case KeyEvent.VK_UP://上キー 上移動
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

修正しました

2021/05/31 07:13

投稿

cretter
cretter

スコア91

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 現在一つの`JFrame`の中に二つの`JPanel`を入れ片方には何かのキーを押すこと(`KeyListener`)で変わり、もう片方には特に何もないただの`JPanel`になっています。この時は問題なく何かのキーを入力すると変わりますが、もう一つの`JPanel`の方に`JButton`を設置し、ボタンを押すと(`ActionListener`)文字が表示されるようにすると、`JButton`のボタンを押すと文字は出てくれるのですが、何かのキーを押しても変わりません。
3
+ 現在一つの`JFrame`の中に二つの`JPanel`を入れ片方には矢印キーを押すこと(`KeyListener`)で画像矢印に沿って動き、もう片方には特に何もないただの`JPanel`になっています。この時は問題なく矢印キーを入力すると画像動きますが、もう一つの`JPanel`の方に`JButton`を設置し、ボタンを押すと(`ActionListener`)文字が表示されるようにすると、`JButton`のボタンを押すと文字は出てくれるのですが、矢印キーを押しても画像動きません。
4
4
 
5
5
  これは一つのクラスで`implements KeyListener, ActionListener`を使って、二つ実装しています。
6
6
 

1

ソースコードを少し加えました

2021/05/31 04:52

投稿

cretter
cretter

スコア91

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