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

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

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

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

1回答

2513閲覧

Javaでキー入力の回数を数えて条件分岐をしたい

dfsjofjoi435

総合スコア3

JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

1グッド

0クリップ

投稿2020/11/02 07:50

編集2020/11/02 08:05

Javaでキー入力の回数を数えて条件分岐をしたい

Javaで右矢印キーの回数が10回を超えると右矢印を押してもフレーム内の小さな□が右ではなく上に移動したりするプログラムを作成したいです。とりあえずif文なしのプログラムは作れたのですがここからif文の条件がうまく組み込めません。どなたかわかる方教えてください。

発生している問題・エラーメッセージ

エラーメッセージ

import

1import java.awt.event.KeyAdapter; 2import java.awt.event.KeyEvent; 3 4import javax.swing.JFrame; 5 6public class MyJFrameif extends JFrame { 7 8 private final static int FRAME_LENGTH = 300; 9 10 private final static int LENGTH_OF_PLAYER = 10; 11 12 private Rectangle player = new Rectangle(FRAME_LENGTH / 2, FRAME_LENGTH /2, 13 LENGTH_OF_PLAYER, LENGTH_OF_PLAYER); 14 15 public static void main(String[] args) { 16 new MyJFrameif(); 17 } 18 19 public MyJFrameif() { 20 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21 22 MyKeyAdapter myKeyAdapter = new MyKeyAdapter(); 23 addKeyListener(myKeyAdapter); 24 25 setSize(FRAME_LENGTH, FRAME_LENGTH); 26 setVisible(true); 27 } 28 29 public void paint(Graphics g) { 30 g.drawImage(getScreen(), 0, 0, this); 31 } 32 33 private Image getScreen() { 34 Image screen = createImage(FRAME_LENGTH, FRAME_LENGTH); 35 Graphics2D g = (Graphics2D)screen.getGraphics(); 36 37 38 g.setColor(Color.red); 39 g.draw(player); 40 41 return screen; 42 } 43 44 private class MyKeyAdapter extends KeyAdapter { 45 46 @Override 47 48 public void keyPressed(KeyEvent e) { 49 switch (e.getKeyCode()) { 50 case KeyEvent.VK_LEFT: 51 player.setLocation((int)player.getX() - 10, (int)player.getY()); 52 break; 53 54 case KeyEvent.VK_RIGHT: 55 player.setLocation((int)player.getX() + 10, (int)player.getY()); 56 break; 57 58 case KeyEvent.VK_UP : player.setLocation((int)player.getX() , (int)player.getY() - 10); 59 break; 60 61 case KeyEvent.VK_DOWN :player.setLocation((int)player.getX() , (int)player.getY() + 10); 62 break; 63 64 } 65 66 repaint(); 67 } 68 69 } 70 71} 72コード

試したこと

自分では以下のような文を追加してみました。

int count = 0;
if(case KeyEvent.VK_RIGHT){
count++;
}

if(count > 10){

public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: player.setLocation((int)player.getX() , (int)player.getY() + 10); break; case KeyEvent.VK_RIGHT: player.setLocation((int)player.getX() - 10, (int)player.getY()); break; case KeyEvent.VK_UP :player.setLocation((int)player.getX() + 10, (int)player.getY()); break; case KeyEvent.VK_DOWN :player.setLocation((int)player.getX() , (int)player.getY() - 10); break; }

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

TN8001👍を押しています

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

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

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

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

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

y_waiwai

2020/11/02 08:00

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

ベストアンサー

キーイベントの練習 | 「Javaを復習する初心者」が復習・学習するブログ
こちらを参考にされたのですね?
参考サイトは質問に明記してください。

とりあえずif文なしのプログラムは作れたのですが

switch文のcaseを増やしたところですね。
既存のコードを改造して予想通りの挙動を得たんですね。すばらしいです。

しかしながら「試したこと」のコードはめちゃくちゃです。
if文はメソッドの中に書きます。
caseはswitch文専用なので、if文では使えません。

コードを尊重しつつ質問を満たすようにするなら、こんな感じでしょうか(countを減らす部分がないので右に行かなくなってしまいますが^^;

Java

1import java.awt.Color; 2import java.awt.Graphics; 3import java.awt.Graphics2D; 4import java.awt.Image; 5import java.awt.Rectangle; 6import java.awt.event.KeyAdapter; 7import java.awt.event.KeyEvent; 8import javax.swing.JFrame; 9 10public class MyJFrameif extends JFrame { 11 private final static int FRAME_LENGTH = 300; 12 private final static int LENGTH_OF_PLAYER = 10; 13 14 private Rectangle player = new Rectangle(FRAME_LENGTH / 2, FRAME_LENGTH / 2, 15 LENGTH_OF_PLAYER, LENGTH_OF_PLAYER); 16 17 public static void main(String[] args) { 18 new MyJFrameif(); 19 } 20 21 public MyJFrameif() { 22 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 23 addKeyListener(new MyKeyAdapter()); 24 setSize(FRAME_LENGTH, FRAME_LENGTH); 25 setLocationRelativeTo(null); 26 setVisible(true); 27 } 28 29 public void paint(Graphics g) { 30 g.drawImage(getScreen(), 0, 0, this); 31 } 32 33 private Image getScreen() { 34 Image screen = createImage(FRAME_LENGTH, FRAME_LENGTH); 35 Graphics2D g = (Graphics2D) screen.getGraphics(); 36 g.setColor(Color.red); 37 g.draw(player); 38 39 return screen; 40 } 41 42 private class MyKeyAdapter extends KeyAdapter { 43 private int count = 0; 44 45 @Override 46 public void keyPressed(KeyEvent e) { 47 int keyCode = e.getKeyCode(); 48 49 if (keyCode == KeyEvent.VK_RIGHT) { 50 count++; 51 52 if (count > 10) { 53 keyCode = KeyEvent.VK_UP; 54 } 55 } 56 57 switch (keyCode) { 58 case KeyEvent.VK_LEFT: 59 player.setLocation((int) player.getX() - 10, (int) player.getY()); 60 break; 61 62 case KeyEvent.VK_RIGHT: 63 player.setLocation((int) player.getX() + 10, (int) player.getY()); 64 break; 65 66 case KeyEvent.VK_UP: 67 player.setLocation((int) player.getX(), (int) player.getY() - 10); 68 break; 69 70 case KeyEvent.VK_DOWN: 71 player.setLocation((int) player.getX(), (int) player.getY() + 10); 72 break; 73 74 default: return; 75 } 76 77 repaint(); 78 } 79 } 80}

投稿2020/11/03 14:07

TN8001

総合スコア9317

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

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

dfsjofjoi435

2020/11/04 02:03

多くの指摘、アドバイスありがとうございます。さらにやりたいことが増えたのでこのコードをもとに自分で改造してみようと思います。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問