ど初心者です。
javaによりトランプのスピードを一人で行うゲームのguiを描くに当たってキーボード操作によるイベントリスナーであるキーリスナーを用いたいのですがgui画面のみ表示され、コンパイルエラーが出ずにキー操作への反応がなされません。
keyTyped直下の操作
System.out.println("テスト");
もききません。
稚拙な質問ですがご教授お願いいたします。
java
1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4 5public class Speed extends JPanel implements KeyListener { 6 7 // 場、山、自陣a[4]に入れるカードを配列として用意する。 8 public static int[] a = new int[4], yama = new int[56], ba = new int[53]; 9 public static int counterYAMA = 0, counterBA = 0, counterHOJU = 0; 10 11 public Speed() { 12 13 // 山に入るカードをシャッフルし配列として格納する。 14 int i; 15 for (i = 0; i < 52; i++) 16 yama[i] = i + 1; 17 for (i = 51; i > 0; i--) { 18 int r = (int) (Math.random() * 52) + 1; 19 int t = yama[r]; 20 yama[r] = yama[i]; 21 yama[i] = t; 22 } 23 for (i = 0; i < 4; i++) 24 a[i] = yama[i]; 25 counterYAMA = 4; 26 27 yama[52]=-1; 28 yama[53]=-1; //この三つは最後カードがなくなったときの表示として使う。 29 yama[54]=-1; 30 31 // gui部分。 32 //アイコンに数字とスートをあてはめる。 33 int a0 = a[0] % 13 + 1; 34 int a1 = a[1] % 13 + 1; 35 int a2 = a[2] % 13 + 1; 36 int a3 = a[3] % 13 + 1; 37 int nba = ba[counterBA] % 13 + 1; 38 String suit0 = null, suit1 = null, suit2 = null, suit3 = null, suitBA = null; 39 40 if (a[0] < 14) 41 suit0 = "c"; 42 else if (a[0] < 27) 43 suit0 = "d"; 44 else if (a[0] < 40) 45 suit0 = "h"; 46 else if (a[0] < 53) 47 suit0 = "s"; 48 if (a[1] < 14) 49 suit1 = "c"; 50 else if (a[1] < 27) 51 suit1 = "d"; 52 else if (a[1] < 40) 53 suit1 = "h"; 54 else if (a[1] < 53) 55 suit1 = "s"; 56 if (a[2] < 14) 57 suit2 = "c"; 58 else if (a[2] < 27) 59 suit2 = "d"; 60 else if (a[2] < 40) 61 suit2 = "h"; 62 else if (a[2] < 53) 63 suit2 = "s"; 64 if (a[3] < 14) 65 suit3 = "c"; 66 else if (a[3] < 27) 67 suit3 = "d"; 68 else if (a[3] < 40) 69 suit3 = "h"; 70 else if (a[3] < 53) 71 suit3 = "s"; 72 if (counterBA > 0){ 73 if (ba[counterBA] < 14) 74 suitBA = "c"; 75 else if (ba[counterBA] < 27) 76 suitBA = "d"; 77 else if (ba[counterBA] < 40) 78 suitBA = "h"; 79 else if (ba[counterBA] < 53) 80 suitBA = "s"; 81 } 82 83 Icon man1 = null,man2 = null,man3 = null,man4 = null,iba = null,iyama = null; 84 if (a[0] > 0) 85 man1 = new ImageIcon(String.format("%s%02d.gif", suit0, a0)); 86 else 87 man1 = new ImageIcon("z01.gif"); 88 if (a[1] > 0) 89 man2 = new ImageIcon(String.format("%s%02d.gif", suit1, a1)); 90 else 91 man2 = new ImageIcon("z01.gif"); 92 if (a[2] > 0) 93 man3 = new ImageIcon(String.format("%s%02d.gif", suit2, a2)); 94 else 95 man3 = new ImageIcon("z01.gif"); 96 if (a[3] > 0) 97 man4 = new ImageIcon(String.format("%s%02d.gif", suit3, a3)); 98 else 99 man4 = new ImageIcon("z01.gif"); 100 101 if (0 < counterBA && counterBA < 52) 102 iba = new ImageIcon(String.format("%s%02d.gif", suitBA, nba)); 103 104 if (counterYAMA < 52) 105 iyama = new ImageIcon("z01.gif"); 106 107 108 //パネルの配置。 109 JPanel p1,p2; 110 JButton b1, b2, b3, b4, b5, b6,b7; 111 112 p1 = new JPanel(); 113 p2 = new JPanel(); 114 b1 = new JButton(man1); 115 b2 = new JButton(man2); 116 b3 = new JButton(man3); 117 b4 = new JButton(man4); 118 if (counterBA == 0) 119 b5 = new JButton("sボタンでゲーム開始だよ!"); 120 else if (counterBA == 52){ 121 b5 = new JButton(String.format("finish!!\n%d回補充したね!", counterHOJU-1)); 122 System.out.println("finish!!\n"+ (counterHOJU - 1) +"回補充したね!"); 123 } 124 else 125 b5 = new JButton(iba); 126 b6 = new JButton("←場 山→"); 127 if (counterYAMA == 52) 128 b7 = new JButton("ラストスパート!"); 129 else 130 b7 = new JButton(iyama); 131 132 p1.setLayout(new BoxLayout(p1,BoxLayout.X_AXIS)); 133 p1.add(b1); 134 p1.add(b2); 135 p1.add(b3); 136 p1.add(b4); 137 p2.setLayout(new BoxLayout(p2,BoxLayout.X_AXIS)); 138 p2.add(b5); 139 p2.add(b6); 140 p2.add(b7); 141 142 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 143 add(p2); 144 add(p1); 145 146 setFocusable(true); 147 addKeyListener(this); 148 149 // ゲーム開始! 150 } 151 public void keyTyped(KeyEvent e) { 152 153 int key = e.getKeyCode(); 154 if (key == 's') { 155 System.out.println("sのキーが押された.山から場へ"); 156 ba[counterBA] = yama[counterYAMA]; 157 counterBA++; 158 counterYAMA++; 159 counterHOJU++; 160 System.out.println("場" + ba[counterBA] + " 山" + yama[counterYAMA] + "\n\n自陣" + a[0] + " " + a[1] + " " 161 + a[2] + " " + a[3]); 162 } else if (key == 'h') { 163 System.out.println("hのキーが押された"); 164 ba[counterBA] = a[0]; 165 counterBA++; 166 if (counterYAMA < 52) { 167 a[0] = yama[counterYAMA]; 168 counterYAMA++; 169 } 170 System.out.println("場" + ba[counterBA] + " 山" + yama[counterYAMA] + "\n\n自陣" + a[0] + " " + a[1] + " " 171 + a[2] + " " + a[3]); 172 } else if (key == 'j') { 173 System.out.println("jのキーが押された"); 174 ba[counterBA] = a[1]; 175 counterBA++; 176 if (counterYAMA < 52) { 177 a[1] = yama[counterYAMA]; 178 counterYAMA++; 179 } 180 System.out.println("場" + ba[counterBA] + " 山" + yama[counterYAMA] + "\n\n自陣" + a[0] + " " + a[1] + " " 181 + a[2] + " " + a[3]); 182 183 } else if (key == 'k') { 184 System.out.println("kのキーが押された"); 185 ba[counterBA] = a[2]; 186 counterBA++; 187 if (counterYAMA < 52) { 188 a[2] = yama[counterYAMA]; 189 counterYAMA++; 190 } 191 System.out.println("場" + ba[counterBA] + " 山" + yama[counterYAMA] + "\n\n自陣" + a[0] + " " + a[1] + " " 192 + a[2] + " " + a[3]); 193 } else if (key == 'l') { 194 System.out.println("lのキーが押された"); 195 ba[counterBA] = a[3]; 196 counterBA++; 197 if (counterYAMA < 52) { 198 a[3] = yama[counterYAMA]; 199 counterYAMA++; 200 } 201 System.out.println("場" + ba[counterBA] + " 山" + yama[counterYAMA] + "\n\n自陣" + a[0] + " " + a[1] + " " 202 + a[2] + " " + a[3]); 203 } 204 repaint(); 205 } 206 207 public void keyPressed(KeyEvent e) { 208 } 209 210 public void keyReleased(KeyEvent e) { 211 } 212 213 public static void main(String[] args) { 214 JFrame Speedframe = new JFrame("JPanel"); 215 Speedframe.setBackground(Color.CYAN); 216 Speedframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 217 Speed s = new Speed(); 218 Speedframe.add(s, BorderLayout.CENTER); 219 Speedframe.pack(); 220 Speedframe.setVisible(true); 221 } 222 223}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/21 02:16
2015/07/21 02:58
2015/07/21 03:12
2015/07/21 03:29