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

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

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

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

Q&A

解決済

1回答

1185閲覧

java ボタンを使ったシーン切り替え 参考との不一致

maikel

総合スコア61

Java

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

0グッド

0クリップ

投稿2018/08/11 00:47

前提条件

ボタンを使ってシーンを切り替えをするプログラムを作っています。参考で一部ネットにあるものを使いました。切り替えのプログラムは参考と同じなのですが、シーン切り替えがうまくいきません。ご教授願えないでしょうか。

Java

1package test; 2import javax.swing.*; 3import java.awt.Graphics; 4import java.awt.Insets; 5import java.awt.Color; 6 7 8public class a{ 9static JButton button1; 10 public static void main(String[] args) throws InterruptedException{ 11 GameWindow gw = new GameWindow("テストウィンドウ",400,300); 12 gw.setVisible(true); 13 gw.change(new Scene1()); 14 Thread.sleep(1000); 15 //シーン切り替えの文章 16 button1.addActionListener(e -> { 17 gw.change(new Scene2()); 18 }); 19 } 20} 21 22class GameWindow extends JFrame{ 23 private Thread th = null; 24 25 public GameWindow(String title, int width, int height) { 26 super(title); 27 setDefaultCloseOperation(EXIT_ON_CLOSE); 28 setSize(width,height); 29 setLocationRelativeTo(null); 30 setResizable(false); 31 } 32 33 //画面切り替え用メソッド 34 public void change(JPanel panel) { 35 getContentPane().removeAll(); 36 37 super.add(panel);//画面追加 38 validate();//更新 39 repaint();//再描画 40 } 41 42} 43 44 45class Scene1 extends JPanel{ 46 public void paintComponent(Graphics g) { 47 super.paintComponent(g); 48 g.setColor(Color.WHITE); 49 g.fillRect(0,0,400,300); 50 51 JButton button1 = new JButton("View1"); 52 add(button1); 53 54 g.setColor(Color.BLACK); 55 g.drawString("タイトル画面", 170, 50); 56 } 57} 58 59 60 61class Scene2 extends JPanel{ 62 public void paintComponent(Graphics g) { 63 super.paintComponent(g); 64 g.setColor(Color.BLACK); 65 g.fillRect(0,0,400,300); 66 67 g.setColor(Color.WHITE); 68 g.drawString("ゲーム画面", 170, 50); 69 } 70} 71 72 73 74class Scene3 extends JPanel{ 75 public void paintComponent(Graphics g){ 76 super.paintComponent(g); 77 g.drawImage(); 78 g.fillRect(0,0,400,300); 79 } 80} 81 82 83 84class Scene4 extends JPanel{ 85 public void paintComponent(Graphics g){ 86 super.paintComponent(g); 87 g.drawImage(); 88 g.fillRect(0,0,400,300); 89 } 90} 91

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

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

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

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

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

guest

回答1

0

ベストアンサー

1, Swingで画面遷移を行う時はCardLayoutを使ってくださいな。
多分それが一番早いです。

■参考情報
CardLayoutクラス
Java初心者:カウントダウン後に画面遷移をしたいです
JFrameでのJPanelの切り替えについて

2, mainメソッドはEDT(Event Dispatch Thread)ではないので、
gw.change(new Scene1());の呼び出しは
SwingUtilities#invokeLaterを使ってくださいな。

3, 画面の途中描画がない件は当たり判定後、ラベルの出力前に画面遷移してしまう。を参考にしてください。

投稿2018/08/11 01:32

編集2018/08/11 01:41
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問