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

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

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

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

Q&A

解決済

3回答

1930閲覧

java  じゃんけんゲーム

daichanman123

総合スコア32

Java

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

0グッド

0クリップ

投稿2015/09/15 08:50

javaでじゃんけんゲームを作っています。
今ここまでできている状況です。

コード public class MainFrame extends JFrame implements KeyListener{ //------------------------------------------------------------------------- JPanel panel1; JLabel label1; public static void main(String args[]){ MainFrame frame = new MainFrame("ジャンケンゲーム"); frame.setSize(500, 500); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.addKeyListener(frame); } public MainFrame(String title){ setTitle(title); panel1 = new JPanel(); label1 = new JLabel("ジャンケンスタート"); label1.setFont(new Font("MS ゴシック", Font.BOLD, 36)); panel1.add(label1); add(panel1); } //----------------------------------------------------------------------- JPanel panel2; JLabel label2; JButton button1, button2; public void keyPressed(KeyEvent evt) { switch(evt.getKeyCode()){ case KeyEvent.VK_ENTER: panel2 = new JPanel(); label2 = new JLabel("プレイヤー人数"); button1 = new JButton("1人"); button1.addActionListener(new MyListener()); button2 = new JButton("2人"); button2.addActionListener(new MyListener()); panel2.add(label2); panel2.add(button1); panel2.add(button2); add(panel2); this.validate(); break; default: } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } //----------------------------------------------------------------------------- class MyListener implements ActionListener{ public void actionPerformed(ActionEvent evt){ if(evt.getSource() == button1){ JLabel label3 = new JLabel("参加者1人"); panel2.add(label3); add(panel2); } else{ JLabel label4 = new JLabel("参加者2人"); panel2.add(label4); add(panel2); } } } }

・「ジャンケンスタート」という文字を表示
・Enterキーを押すと「プレイヤー人数 1人 2人」のボタンが出てくる
・「1人」のボタンを押すと「参加者1人」、「2人」のボタンを押すと「参加者2人」の文字が表示

という感じになるようにプログラムを組んだつもりなのですが、エラーは出ていませんが、1人2人のボタンを押しても何も表示されません。
どうすれば表示させれるようになるのか教えていただきたいです。

またこのプログラム自体回りくどいやり方をしているような気がするので、こういうやり方でした方がいいなどの指摘があると教えていただきたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

既に配置されているコンポーネント(今回はpanel2)に対して、新たにオブジェクト(今回はlabel3か4)を追加した場合、画面の再描画が必要です。
これはGUIアプリケーションでは、通常必要な処理です。

Swingの詳細な動作はわかりませんので、一般的なWindowsの画面表示について説明します。

Windowsの画面表示は、アプリケーションだけの世界ではなく、OSにも関わる物なので、OSからアプリケーションに対して、WM_PAINメッセージを発行してもらう必要があります。
アプリケーションはそのメッセージを付けると、再度レイアウトの処理を行います。この部分は、画面用のライブラリ(Swingなど)が自動で行ってくれているため、普段は意識する必要がありません。

投稿2015/09/16 01:16

shanxia

総合スコア1038

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

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

daichanman123

2015/09/16 02:00

回答ありがとうございます^^ windowsでも行われている必要な処理なんですね! ありがとうございました。
guest

0

ベストアンサー

actionPerformed()メソッドの最後で、validate()メソッドを呼び出せばいいかと思います。

投稿2015/09/15 15:49

shanxia

総合スコア1038

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

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

daichanman123

2015/09/16 00:52

回答ありがとうございます^^ validate()メソッドは再描画を行う働きがあるみたいなのですが、なぜvalidate()メソッドをいれる必要があるのでしょうか?
shanxia

2015/09/16 01:52

コメントへの返答欄と、回答欄を間違えてしまいました。。。 回答欄に返信したので、そちらを見てください。
guest

0

プログラムの内容は間違ってないと思われます。
このプログラムでボタンが押されると必ずlabel3かlabel4のどちらかが必ず表示されます。
下記の確認を行ってください。
if(evt.getSource() == button1){
//ログ出力
}else{
//ログ出力
}
ここで、ログが出力される場合はlabelの位置をずらしてください。

投稿2015/09/15 10:11

yona

総合スコア18155

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

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

daichanman123

2015/09/16 00:50

回答ありがとうございます^^ ログ出力とはなんのことでしょうか? 知識が浅くてすみません。
yona

2015/09/16 05:43

System.out等を使ってコンソールに文字を出力する事です。 それにより、プログラムが任意の箇所に到達したかどうかや変数の内容を出力する事によりプログラムの状態を知る事ができます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問