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

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

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

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

解決済

JFrameでのJPanelの切り替えについて

Hinantius246
Hinantius246

総合スコア17

Java

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

1回答

0評価

0クリップ

10524閲覧

投稿2017/05/10 23:15

編集2017/05/11 09:35

###前提・実現したいこと
(例)Java(UIはJFrame)でゲームを作っているのですが、JPanelの切り替えをJFrameで行おうとしています。
しかし、JPanelの切り替えがうまくいきません。

なお、切り替えにはこのサイトのような切り替え方法を使っています。

###発生している問題

切り替え自体はどうやら成功しているようだが、パネルのボタンの表示がされない

###該当のソースコード
※作成中のゲームのため、一部関数を改変し、コメントはすべて除去した

Java

package panels; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class MainFrame extends JFrame{ public String[] PanelNames = {"First","Second","Third"}; FirstPanel fp = new FirstPanel(PanelNames[0]); SecondPanel sp = new SecondPanel(PanelNames[1]); ThirdPanel tp = new ThirdPanel(PanelNames[2]); public JPanel[] jps = {fp,sp,tp}; int i; private static final int VERTICAL = 768; private static final int HORIZONTAL = 1024; public MainFrame(){ super("Test"); this.add(fp);fp.setVisible(true); this.add(sp);sp.setVisible(false); this.add(tp);tp.setVisible(false); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowClosing()); setSize(HORIZONTAL,VERTICAL); setResizable(false); Container contentPane = getContentPane(); contentPane.add(jps[i], BorderLayout.CENTER); setVisible(true); } class WindowClosing extends WindowAdapter{ public void windowClosing(WindowEvent e) { int ans = JOptionPane.showConfirmDialog (MainFrame.this, "本当に終了しますか?"); if(ans == JOptionPane.YES_OPTION) { System.exit(0); } } } public void changeKey(JPanel jp, String str){ System.out.println(jp.getName()); String name = jp.getName(); if (name==PanelNames[0]){ fp = (FirstPanel)jp; fp.setVisible(false); System.out.println("〇"); } else if (name==PanelNames[1]){ sp = (SecondPanel)jp; sp.setVisible(false); System.out.println("●"); } else if (name==PanelNames[2]){ tp = (ThirdPanel)jp; tp.setVisible(false); System.out.println("◎"); } else { System.out.println("huh?"); } if (str==PanelNames[0]){ fp.setVisible(true); //iで切り替え! i = 0; System.out.println("△"); } else if (str==PanelNames[1]){ sp.setVisible(true); i = 1; System.out.println("▼"); } else if (str==PanelNames[2]){ tp.setVisible(true); i = 2; System.out.println("▲"); } else { System.out.println("huh?"); } } } package panels; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; package panels; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; public class FirstPanel extends JPanel implements ActionListener{ String str; public FirstPanel(String s){ str = s; this.setName("First"); //setLocationRelativeTo(null); setLayout(null); JLabel titleLabel = new JLabel("FirstPanel"); titleLabel.setBounds(270, 100, 512, 100); titleLabel.setFont(new Font("MS ゴシック", Font.BOLD, 64)); titleLabel.setHorizontalTextPosition(JLabel.CENTER); JButton buttonOne = new JButton("One"); buttonOne.setBounds(256, 350, 512, 50); buttonOne.addActionListener(this); buttonOne.setActionCommand("One"); JButton buttonTwo = new JButton("Two"); buttonTwo.setBounds(256, 400, 512, 50); buttonTwo.addActionListener(this); buttonTwo.setActionCommand("Two"); JButton buttonThree = new JButton("Three"); buttonThree.setBounds(256, 4050, 512, 50); buttonThree.addActionListener(this); buttonThree.setActionCommand("Three"); JButton buttonFour = new JButton("Four"); buttonFour.setBounds(256, 500, 512, 50); buttonFour.addActionListener(this); buttonFour.setActionCommand("Four"); JButton buttonFive = new JButton("Five"); buttonFive.setBounds(256, 550, 512, 50); buttonFive.addActionListener(this); buttonFive.setActionCommand("Five"); add(titleLabel); add(buttonOne); add(buttonTwo); add(buttonThree); add(buttonFour); add(buttonFive); } @Override public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); System.out.println(cmd); switch(cmd){ case "One": break; case "Two": break; case "Three": break; case "Four": break; case "Five": System.exit(0); break; default: //何もない場合はreturnで切る return; } } } SecondPanelThirdPanelはこれと同じなので省略

###試したこと

  • SecondPanelのみをMainにして起動→動作する
  • MainFrameのFirstPanelをfalseにしてSecondPanelをtrueにする→動作しない(ThirdPanelでも動作しない)
  • 切り替え時にコンソール上に文字を表記→切り替え時の文字は表記される
  • FirstPanelからFirstPanelに転送→表示される

###補足情報(言語/FW/ツール等のバージョンなど)
Java8(Eclipse)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

umyu

2017/05/11 00:49

多分、行いたいことはゲームのシーン遷移だと思いますがー。。質問文のコードではコンパイルエラーになります! 1,FirstPanelのコンストラクタが一致してません。2,MainFrameコンストラクタのsuper(Main.title);3,同コンストラクタdp.setVisible(false);

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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