質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

1083閲覧

keyEventが取得できない

etcetera

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/02/12 14:17

編集2021/02/12 14:19

現在ゲームの枠組みを作っています。MainPanelを用意し、そこにstartpanelやgamepanel,gameclearpanelなどをMainpanel上で入れ替えるといったプログラムを作りたいと思っています。初めはMainpanelにはstartpanelが載せられており、「s」キーを押すとゲームがスタートしてgemapanelに行くようにしたいのですが、キーがうまく取得されません。おそらく下記のStartPanelに問題があると思うのですが、どこが間違っているのかわからないので、解決策を教えてください。

java

1import javax.swing.JFrame; 2import java.awt.BorderLayout; 3 4import javax.swing.JPanel; 5import java.awt.Color; 6import java.awt.Font; 7import java.awt.FontMetrics; 8import java.awt.Graphics; 9import java.awt.event.ActionEvent; 10import java.awt.event.ActionListener; 11import java.awt.event.KeyAdapter; 12import java.awt.event.KeyEvent; 13 14import javax.swing.JButton; 15import javax.swing.JPanel; 16 17public class GameFrame extends JFrame { 18 19 public GameFrame() { 20 21 setLayout(null); 22 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 23 setSize(500,500); 24 setLocationRelativeTo(null); 25 MainPanel pn =new MainPanel(); 26 add(pn); 27 setVisible(true); 28 29 } 30 31 public static void main(String[] args) { 32 GameFrame GF=new GameFrame(); 33 34 35 36 } 37 38} 39 40public class MainPanel extends JPanel implements Runnable { 41 StartPanel sp; 42 GamePanel gp; 43 GameClearPanel gcp; 44 GameOverPanel gop; 45 boolean in_game=true;//ゲーム実行中はtrue 46 public int state=0;//ゲーム状態 47 public int level=1;//ゲームレベル 48 int old_state=0;//直前のゲーム状態 49 Thread td; 50 int width=500; 51 int hight=500; 52 53 public MainPanel() { 54 55 setSize(width,hight); 56 setLayout(new BorderLayout()); 57 sp=new StartPanel(this); 58 add(sp,BorderLayout.CENTER); 59 td=new Thread(this); 60 td.start(); 61 62 } 63 64 public void run() { 65 while(in_game) { 66 try { 67 td.sleep(100); 68 }catch(InterruptedException e) {} 69 if(state!=old_state) { 70 if(old_state==0) { 71 remove(sp); 72 } 73 else if(old_state==1) { 74 remove(gp); 75 } 76 else if(old_state==2) { 77 remove(gcp); 78 } 79 else { 80 remove(gop); 81 } 82 } 83 //新しいパネルの追加 84 if (state==4) { 85 in_game=false; 86 } 87 else if(state==1) { 88 gp=new GamePanel(this); 89 add(gp); 90 } 91 else if(state==2) { 92 gcp=new GameClearPanel(this); 93 add(gcp); 94 } 95 else if(state==3){ 96 gop=new GameOverPanel(this); 97 add(gop); 98 } 99 validate(); 100 old_state=state; 101 } 102} 103} 104 105public class StartPanel extends JPanel implements ActionListener{ 106 boolean in_game=true; 107 MainPanel mp; 108 JButton bt; 109 110 public StartPanel(MainPanel mp1) { 111 112 mp=mp1; 113 setLayout(null); 114 setBackground(Color.white); 115 Font f=new Font("SansSerif",Font.BOLD,20); 116 FontMetrics fm=getFontMetrics(f); 117 String str="遊び方"; 118 int w=fm.stringWidth(str)+50; 119 int h=fm.getHeight()+20; 120 bt=new JButton(str); 121 bt.setFont(f); 122 bt.addActionListener(this); 123 bt.setSize(w,h); 124 bt.setLocation(250-w/2,400); 125 add(bt); 126 addKeyListener(new Key()); 127 setFocusable(true); 128 129 130 131 } 132 133 public void paint(Graphics g) { 134 super.paint(g); 135 FontMetrics fm; 136 Font f; 137 String str1,str="Game Title"; 138 int w,h; 139 140 f=new Font("Serif",Font.BOLD,25); 141 fm=g.getFontMetrics(f); 142 str1=str+"(Serif)"; 143 w=fm.stringWidth(str1); 144 h=fm.getHeight(); 145 g.setFont(f); 146 g.drawString(str1,250-w/2,h); 147 148 f=new Font("SansSerif",Font.BOLD,25); 149 fm=g.getFontMetrics(f); 150 str1=str+"(SansSerif)"; 151 w=fm.stringWidth(str1); 152 h=h+fm.getHeight()+10; 153 g.setFont(f); 154 g.drawString(str1,250-w/2,h); 155 156 157 f=new Font("Dialog",Font.BOLD,25); 158 fm=g.getFontMetrics(f); 159 str1=str+"(Dialog)"; 160 w=fm.stringWidth(str1); 161 h=h+fm.getHeight()+10; 162 g.setFont(f); 163 g.drawString(str1,250-w/2,h); 164 165 f=new Font("DialogInput",Font.BOLD,25); 166 fm=g.getFontMetrics(f); 167 str1=str+"(DialogInput)"; 168 w=fm.stringWidth(str1); 169 h=h+fm.getHeight()+10; 170 g.setFont(f); 171 g.drawString(str1,250-w/2,h); 172 173 f=new Font("Serif",Font.PLAIN,20); 174 fm=g.getFontMetrics(f); 175 str1="ゲーム開始: 「s」キー"; 176 w=fm.stringWidth(str1); 177 h=500-fm.getHeight()-10; 178 g.setFont(f); 179 g.drawString(str1,250-w/2,h-200); 180 requestFocusInWindow(); 181 182 183S 184 185 186 } 187 188 public void actionPerformed(ActionEvent e) { 189 if(e.getSource()==bt) { 190 System.out.println("遊び方"); 191 } 192 } 193 194 class Key extends KeyAdapter{ 195 public void KeyPressed(KeyEvent ke) { 196 if(ke.getKeyCode()==KeyEvent.VK_S) { 197 mp.state=1; 198 System.out.println("キーを取得"); 199 } 200 } 201 } 202 203}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

メソッドをオーバーライドするなら、@Overrideアノテーションをつけてみるといい。

java

1 class Key extends KeyAdapter{ 2 @Override 3 public void KeyPressed(KeyEvent ke) { 4 if(ke.getKeyCode()==KeyEvent.VK_S) { 5 mp.state=1; 6 System.out.println("キーを取得"); 7 } 8 } 9 }

上記だとコンパイルエラーとなるはず。以下だとコンパイルエラーは消えるし、イベントは拾える。

java

1 class Key extends KeyAdapter{ 2 @Override 3 public void keyPressed(KeyEvent ke) { 4 if(ke.getKeyCode()==KeyEvent.VK_S) { 5 mp.state=1; 6 System.out.println("キーを取得"); 7 } 8 } 9 }

投稿2021/02/12 14:40

shiketa

総合スコア4061

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

etcetera

2021/02/13 02:25

@overrideをつけてみると、「型 StartPanel.Key のメソッド KeyPressed(KeyEvent) はスーパータイプ・メソッドをオーバーライドまたは実装する必要があります」というエラーがでてしまうのですがどうすればいいでしょうか?
shiketa

2021/02/13 02:35

どんなメソッドをオーバーライドしようとしているのか、よく、よ〜く、見てみればよいと思います。
etcetera

2021/02/13 04:40

なるほどメソッド名が間違っていたのですね、@Overrideの意味がよくわからず使用してなかったのですが、こういったスペルミス検出に役立つのですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問