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

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

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

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

Q&A

解決済

1回答

3501閲覧

javaのJPanelの上での描画について

ryo-flat

総合スコア21

Java

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

0グッド

0クリップ

投稿2016/01/03 15:42

編集2016/01/03 15:59

javaでターン制のゲームを作っています。現在作っているBattleScreenクラスはバトル画面をJPanelに描画するクラスであり、MainScreenクラスのJFrameに追加できることを想定しています。しかし、単純に名前を表示したりすることはできるのですがそれを四角の枠で囲ったり、その枠の下に画像を表示を表示させる方法、及びきれいなレイアウトで描画する方法が分かりません。下記がMainScreenクラスで、このJFrameにBorderLayoutのCENTERでaddしたいと考えています。

java

1package gui; 2 3import java.awt.BorderLayout; 4import java.awt.Container; 5import java.awt.Dimension; 6import java.awt.Font; 7import java.awt.event.ActionEvent; 8import java.awt.event.ActionListener; 9 10import javax.swing.ButtonGroup; 11import javax.swing.JButton; 12import javax.swing.JFrame; 13import javax.swing.JLabel; 14import javax.swing.JPanel; 15import javax.swing.JRadioButton; 16import javax.swing.JTextField; 17 18import state.BattleText; 19 20 21public class MainScreen extends JFrame implements ActionListener { 22 23 JFrame f; 24 JPanel p1; 25 JPanel p2; 26 JPanel p3; 27 JPanel p4; 28 JPanel p5; 29 JPanel p6; 30 JPanel battleScreen; 31 JTextField ip; 32 JTextField na; 33 JButton connect; 34 JButton kettei1; 35 JButton kettei2; 36 JButton atk; 37 JButton def; 38 JButton sp; 39 JRadioButton fi; 40 JRadioButton ma; 41 JRadioButton se; 42 ButtonGroup group; 43 JLabel commandInfo; 44 JLabel count; 45 String address; 46 String eff="a"; 47 String name; 48 int job = 0; 49 50 public MainScreen() { 51 f = new JFrame("DENDAI QUEST"); 52 f.setVisible(true); 53 f.setSize(1100, 700); 54 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 55 56 p1 = new JPanel(); 57 p2 = new JPanel(); 58 p3 = new JPanel(); 59 p4 = new JPanel(); 60 p5 = new JPanel(); 61 p6 = new JPanel(); 62 battleScreen = new JPanel(); 63 64 commandInfo = new JLabel(); 65 count = new JLabel(); 66 67 68 69 70 ip = new JTextField("IP", 20); 71 na = new JTextField("名前", 20); 72 73 fi = new JRadioButton("ファイター", true); 74 ma = new JRadioButton("マジシャン"); 75 se = new JRadioButton("シールドセージ"); 76 77 group = new ButtonGroup(); 78 79 group.add(fi); 80 group.add(ma); 81 group.add(se); 82 83 connect = new JButton("接続"); 84 connect.addActionListener(this); 85 kettei1 = new JButton("決定"); 86 kettei1.addActionListener(this); 87 kettei2 = new JButton("決定"); 88 kettei2.addActionListener(this); 89 90 commandInfo.setText("<html>コマンド情報<br>攻撃:通常攻撃<br>防御:防御" 91 + "<br>特殊<br>ファイター:大攻撃<br>マジシャン:回復" + "<br>シールドセージ:跳ね返し</html>"); 92 commandInfo.setBounds(0, 50, 0, 0); 93 94 atk = new JButton("攻撃"); 95 atk.setPreferredSize(new Dimension(200, 100)); 96 atk.addActionListener(this); 97 def = new JButton("防御"); 98 def.setPreferredSize(new Dimension(200, 100)); 99 def.addActionListener(this); 100 sp = new JButton("特殊"); 101 sp.setPreferredSize(new Dimension(200, 100)); 102 sp.addActionListener(this); 103 104 p1.add(commandInfo); 105 106 p2.add(atk); 107 p2.add(def); 108 p2.add(sp); 109 110 111 p3.add(ip); 112 p3.add(connect); 113 p3.add(na); 114 p3.add(kettei1); 115 p3.add(fi); 116 p3.add(ma); 117 p3.add(se); 118 p3.add(kettei2); 119 120 p5.add(battleScreen, BorderLayout.CENTER); 121 122 123 Container contentPane = f.getContentPane(); 124 contentPane.add(p1, BorderLayout.EAST); 125 126 contentPane.add(p3, BorderLayout.NORTH); 127 128 //contentPane.add(p5, BorderLayout.CENTER); 129 130 131 //contentPane.add(jobSelectPanel, BorderLayout.CENTER); 132 133 contentPane.add(p2, BorderLayout.SOUTH); 134 } 135 public static void main(String[] args) { 136 new MainScreen(); 137 } 138} 139

以下が少し前に作った別のJPanelを作るクラスです。このような感じでコンストラクタを呼び出せば表示されるようにしたいと考えています。

java

1package gui; 2 3import java.awt.Dimension; 4import java.awt.event.ActionEvent; 5import java.awt.event.ActionListener; 6 7import javax.swing.JButton; 8import javax.swing.JPanel; 9 10public class JobSelect extends JPanel implements ActionListener { 11 12 public int job; 13 14 JButton fa; 15 JButton ma; 16 JButton se; 17 18 19 public JobSelect() { 20 fa = new JButton("ファイター"); 21 fa.setPreferredSize(new Dimension(100, 100)); 22 fa.addActionListener(this); 23 ma = new JButton("マジシャン"); 24 ma.setPreferredSize(new Dimension(100, 100)); 25 ma.addActionListener(this); 26 se = new JButton("シールドセージ"); 27 se.setPreferredSize(new Dimension(100, 100)); 28 se.addActionListener(this); 29 30 add(fa); 31 add(ma); 32 add(se); 33 } 34 35 public int getJob() { 36 return job; 37 } 38 39 public void setJob(int job) { 40 this.job = job; 41 } 42 43 public void actionPerformed(ActionEvent e) { 44 if(e.getSource() == fa){ 45 job = 0; 46 System.out.println(job); 47 } 48 if(e.getSource() == ma){ 49 job = 1; 50 System.out.println(job); 51 } 52 if(e.getSource() == se){ 53 job = 2; 54 System.out.println(job); 55 } 56 } 57 58 public static void main(String[] args){ 59 new JobSelect(); 60 } 61 62} 63

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

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

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

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

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

guest

回答1

0

ベストアンサー

htmlを書けますが、cssも使えます。

http://codeidol.com/java/swing/Text/Use-HTML-and-CSS-in-Text-Components/

後は、Canvasクラスで描画を試みる方法もあります。

投稿2016/01/04 03:12

lib

総合スコア446

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

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

ryo-flat

2016/01/04 16:16

わかりました。 やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問