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

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

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

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

Q&A

解決済

1回答

3564閲覧

javaのGUIのレイアウトについて

ryo-flat

総合スコア21

Java

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

0グッド

1クリップ

投稿2015/12/28 16:16

自作のターン制バトル型のゲームの画面を作っています。mainScreen.javeのJFrameのJPanelに別のクラスJobSelectのボタンなどを追加したいのですがやり方がわかりません。とりあえずJobSelect.Javaは自身でJFrameを作ってボタンを表示させていますが、これを改造してmainScreen上でJobSelectを呼び出したいと思っています。以下がソースコードです。

java

1mainScreen.java 2 3package gui; 4 5import java.awt.BorderLayout; 6import java.awt.Container; 7import java.awt.Dimension; 8import java.awt.event.ActionEvent; 9import java.awt.event.ActionListener; 10 11import javax.swing.JButton; 12import javax.swing.JFrame; 13import javax.swing.JLabel; 14import javax.swing.JPanel; 15import javax.swing.JTextField; 16 17 18public class MainScreen extends JFrame implements ActionListener{ 19 20 JFrame f; 21 JPanel p1; 22 JPanel p2; 23 JTextField ip; 24 JButton button; 25 JButton atk; 26 JButton def; 27 JButton sp; 28 JLabel info; 29 String address; 30 31 32 public String getAddress() { 33 return address; 34 } 35 36 public void setAddress(String address) { 37 this.address = address; 38 } 39 40 MainScreen(){ 41 f = new JFrame("DENDAI QUEST"); 42 f.setVisible(true); 43 f.setSize(1000, 700); 44 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 45 46 p1 = new JPanel(); 47 p2 = new JPanel(); 48 info = new JLabel(); 49 50 ip = new JTextField("", 20); 51 52 button = new JButton("接続"); 53 button.addActionListener(this); 54 55 info.setText("<html>コマンド情報<br>攻撃:通常攻撃<br>防御:防御" 56 + "<br>特殊<br>ファイター:大攻撃<br>マジシャン:回復" 57 + "<br>シールドセージ:跳ね返し</html>"); 58 info.setBounds(0, 50, 0, 0); 59 60 atk = new JButton("攻撃"); 61 atk.setPreferredSize(new Dimension(200, 100)); 62 atk.addActionListener(this); 63 def = new JButton("防御"); 64 def.setPreferredSize(new Dimension(200, 100)); 65 def.addActionListener(this); 66 sp= new JButton("特殊"); 67 sp.setPreferredSize(new Dimension(200, 100)); 68 sp.addActionListener(this); 69 70 p1.add(ip); 71 p1.add(button); 72 p1.add(info); 73 74 p2.add(atk); 75 p2.add(def); 76 p2.add(sp); 77 78 Container contentPane = f.getContentPane(); 79 contentPane.add(p1, BorderLayout.EAST); 80 contentPane.add(p2, BorderLayout.SOUTH); 81 82 83 } 84 85 public void actionPerformed(ActionEvent e){ 86 if(e.getSource() == "接続"){ 87 address = ip.getText(); 88 } 89 } 90 91 92 public static void main(String[] args){ 93 new MainScreen(); 94 } 95} 96

java

1JobSelect.java 2 3package gui; 4 5import java.awt.BorderLayout; 6import java.awt.Container; 7import java.awt.Dimension; 8import java.awt.event.ActionEvent; 9import java.awt.event.ActionListener; 10 11import javax.swing.JButton; 12import javax.swing.JFrame; 13import javax.swing.JPanel; 14 15public class JobSelect extends JFrame implements ActionListener { 16 17 public int job; 18 19 JFrame frame; 20 JPanel p; 21 Container contentPane; 22 JButton fa; 23 JButton ma; 24 JButton se; 25 26 27 public JobSelect() { 28 frame = new JFrame("JobSelect"); 29 frame.setVisible(true); 30 frame.setSize(800, 500); 31 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 33 p = new JPanel(); 34 35 fa = new JButton("ファイター"); 36 fa.setPreferredSize(new Dimension(200, 100)); 37 fa.addActionListener(this); 38 ma = new JButton("マジシャン"); 39 ma.setPreferredSize(new Dimension(200, 100)); 40 ma.addActionListener(this); 41 se = new JButton("シールドセージ"); 42 se.setPreferredSize(new Dimension(200, 100)); 43 se.addActionListener(this); 44 45 p.add(fa); 46 p.add(ma); 47 p.add(se); 48 49 contentPane = frame.getContentPane(); 50 contentPane.add(p, BorderLayout.CENTER); 51 } 52 53 public int getJob() { 54 return job; 55 } 56 57 public void setJob(int job) { 58 this.job = job; 59 } 60 61 public void actionPerformed(ActionEvent e) { 62 if(e.getSource() == fa){ 63 job = 0; 64 System.out.println(job); 65 } 66 if(e.getSource() == ma){ 67 job = 1; 68 System.out.println(job); 69 } 70 if(e.getSource() == se){ 71 job = 2; 72 System.out.println(job); 73 } 74 } 75 76 public static void main(String[] args){ 77 new JobSelect(); 78 } 79 80} 81

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

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

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

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

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

guest

回答1

0

ベストアンサー

JobSelectJFrameでなくJPanelにして、それをMainScreenのフレームに追加してあげれば良いと思います。

以下、JobSelectクラスの修正例を示します。

lang

1public class JobSelect extends JPanel implements ActionListener { 2 3 public int job; 4 5 JButton fa; 6 JButton ma; 7 JButton se; 8 9 public JobSelect() { 10 fa = new JButton("ファイター"); 11 fa.setPreferredSize(new Dimension(200, 100)); 12 fa.addActionListener(this); 13 ma = new JButton("マジシャン"); 14 ma.setPreferredSize(new Dimension(200, 100)); 15 ma.addActionListener(this); 16 se = new JButton("シールドセージ"); 17 se.setPreferredSize(new Dimension(200, 100)); 18 se.addActionListener(this); 19 20 add(fa); 21 add(ma); 22 add(se); 23 } 24 25(以下略) 26

投稿2015/12/29 13:58

argius

総合スコア9388

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

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

ryo-flat

2015/12/29 15:17

回答ありがとうございます。 JFrameもJPanelも必要ないんですね。 MainScreenの方からはどのようにして使えばいいんでしょうか。
argius

2015/12/29 15:31

JPanel p1などと同じように使えばOKです。 この場合はgetJobメソッドも呼ぶ必要があるので、 MainScreenでのフィールド宣言は JobSelect jobSelectPanel; にして、同じくMainScreenのコンストラクターでは、 jobSelectPanel = new JobSelect(); としてみてください。 (クラス名もJobSelectPanelにしたほうがより分かりやすくなります。) 固有のメソッドがなければ、JPanel jobSelectPanel = new JobSelect()としても使えます。 JFrameへは、JPanelと同じようにContentPaneに追加してください。 ちなみに、Java5以降では、getContentPaneしなくても直接JFrameにaddすればContentPaneに登録できますよ。
ryo-flat

2015/12/29 15:52

フィールドに宣言して、 contentPane.add(jobSelectPanel, BorderLayout.CENTER); を追加してみたのですが、以下のようなエラーが出てしまいました。 Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container at java.awt.Container.checkNotAWindow(Container.java:483) at java.awt.Container.addImpl(Container.java:1084) at java.awt.Container.add(Container.java:998) at javax.swing.JFrame.addImpl(JFrame.java:562) at java.awt.Container.add(Container.java:966) at gui.MainScreen.<init>(MainScreen.java:141) at gui.MainScreen.main(MainScreen.java:193)
argius

2015/12/29 15:57

JobSelectはextends JPanelに変えましたか?
ryo-flat

2015/12/29 15:59

できました。 すみません、変えていませんでした... 細かく教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問