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

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

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

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

2回答

9224閲覧

(JSwing) JPanelに画像を描画したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2016/07/06 02:28

編集2016/07/06 07:38

###前提・実現したいこと
閲覧ありがとうございます。
初めて質問をさせていただきます。
マナー違反等無いよう心がけます。至らぬ点あればご指摘ください。

現在、JavaのSwingを使用し、簡単なゲームを作成しようと考えています。
Webを参考にフレーム内のパネルを切替え画面遷移を行えるようになりました。

次に、先ほど画面遷移に使用したパネルに、画像を格納したラベルを追加することで
画像の表示を実現しようとしました。

しかし、画像が表示されていません。

回答どうかよろしくお願いします。

-追記-
masaya_ohashiさんの指摘により、パスがあっていることは確認できました。
現在はbackGroundLabelに格納できているか確認中です。
アドバイスお待ちしてますm(__)m

###発生している問題
・画像が表示されていない
・ImageIconへの画像格納ができていない(?)
![add実行時のスクショ。画像を読み込めていない。(51ef6557205db4336b049bd74b7346fc.png)
↑パスは確認済みです。

画像貼り付け部分のみ

//画像の貼り付け backGroundIcon = new ImageIcon(); try { backGroundIcon.setImage(ImageIO.read(new File("./title02.jpg"))); //backGroundIcon.setImage(ImageIO.read(new File("./title.png"))); } catch (IOException e1) { e1.printStackTrace(); } //ImageIcon backGroundIcon = new ImageIcon("./title.png"); backGroundLabel = new JLabel(); backGroundLabel.setIcon(backGroundIcon); this.add(backGroundLabel);


以下全体の処理
フレームの作成、パネル切り替えを行う


public class MainFrame extends JFrame { //画面遷移用に画面名を配列に保存 public String[] PanelNames = { "titlePanel", "modeSelectPanel", "stageSelectPanel" }; TitlePanel titlePanel = new TitlePanel(this, PanelNames[0]); ModeSelectPanel modeSelectPanel = new ModeSelectPanel(this, PanelNames[1]); StageSelectPanel stageSelectPanel = new StageSelectPanel(this,PanelNames[2]); //フレームの作成 public MainFrame() { this.add(titlePanel); titlePanel.setVisible(true); this.add(modeSelectPanel); modeSelectPanel.setVisible(false); this.add(stageSelectPanel); stageSelectPanel.setVisible(false); this.setBounds(400, 200, 800, 600); } //ウィンドウを作成し、指定したパネルの処理を行える(メインメソッド) public static void main(String[] args) { MainFrame mainFrame = new MainFrame(); mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); mainFrame.setVisible(true); } //パネルの切替による画面遷移を行う /** * * @param jp 作成されたパネルを格納 * @param str パネル名 */ public void PanelChange(JPanel jp, String str) { System.out.println(jp.getName()); String name = jp.getName(); if (name == PanelNames[0]) { titlePanel = (TitlePanel) jp; titlePanel.setVisible(false); } else if (name == PanelNames[1]) { modeSelectPanel = (ModeSelectPanel) jp; modeSelectPanel.setVisible(false); } else if (name == PanelNames[2]) { stageSelectPanel = (StageSelectPanel) jp; stageSelectPanel.setVisible(false); } if (str == PanelNames[0]) { titlePanel.setVisible(true); } else if (str == PanelNames[1]) { modeSelectPanel.setVisible(true); } else if (str == PanelNames[2]) { stageSelectPanel.setVisible(true); } } }

タイトル画面のパネル


public class TitlePanel extends JPanel { JButton btn, btn2; JLabel paneltitle; MainFrame mainFrame; String str; ImageIcon backGroundIcon; JLabel backGroundLabel; TitlePanel(MainFrame m, String s) { mainFrame = m; str = s; this.setName("titlePanel"); this.setLayout(null); this.setSize(800, 600); paneltitle = new JLabel(getClass().getCanonicalName() + "クラスパネル"); paneltitle.setBounds(0, 5, 400, 40); this.add(paneltitle); //モードセレクトへの移動ボタン作成 btn = new JButton("ModeSelectPanelに移動"); btn.setBounds(20, 50, 300, 80); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { panelChange(mainFrame.PanelNames[1]); } }); this.add(btn); //ステージセレクトへの移動ボタン作成 btn2 = new JButton("SubPanel2に移動"); btn2.setBounds(20, 300, 300, 80); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { panelChange(mainFrame.PanelNames[2]); } }); this.add(btn2); //背景色の設定、背景画像に置き換え //this.setBackground(Color.getHSBColor(65, 0.7f, 0.9f)); //画像の貼り付け backGroundIcon = new ImageIcon(); try { backGroundIcon.setImage(ImageIO.read(new File("./title02.jpg"))); //backGroundIcon.setImage(ImageIO.read(new File("./title.png"))); } catch (IOException e1) { e1.printStackTrace(); } //ImageIcon backGroundIcon = new ImageIcon("./title.png"); backGroundLabel = new JLabel(); backGroundLabel.setIcon(backGroundIcon); this.add(backGroundLabel); } /** *遷移したいパネル名を受け取り、フレーム内の画面遷移メソッドを呼び出す * @param str パネル名 */ public void panelChange(String str) { mainFrame.PanelChange((JPanel) this, str); } }

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

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

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

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

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

masaya_ohashi

2016/07/06 02:30

質問文の中のソースコードはコードブロック(```)で囲んでくださると、文のハイライトやインデントが有効になり、ソースコードが見やすくなります。
退会済みユーザー

退会済みユーザー

2016/07/06 02:47

閲覧、ご指摘ありがとうございます。修正しました。
guest

回答2

0

ベストアンサー

Java

1ImageIcon backGroundIcon = new ImageIcon(); 2backGroundIcon.setImage(ImageIO.read(new File("画像のパス")));

ImageIconの生成をImageIOを使ってやってみたらどうなりますか?

###追記
backGroundLabelに明示的に大きさを設定したらどうなりますか?

Java

1backGroundLabel = new JLabel(); 2backGroundLabel.setIcon(backGroundIcon); 3backGroundLabel.setBounds(0, 0, backGroundIcon.getIconWidth(), backGroundIcon.getIconHeight());

投稿2016/07/06 05:03

編集2016/07/06 07:46
masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2016/07/06 05:49

ありがとうございます。 試してみたところ、やはりパスが間違っていたようで、 読み込みができない旨のメッセージが出力されました。 パスを修正したところ、例外は投げられなくなりましたが、 まだ画像の表示はできていない状態です。
退会済みユーザー

退会済みユーザー

2016/07/06 08:30 編集

ありがとうございます! 表示することができました! とても助かりました!<(_ _)> ↓正解コードです↓ ```lang-Java //画像の貼り付け backGroundIcon = new ImageIcon(); try { backGroundIcon.setImage(ImageIO.read(new File("./title02.jpg"))); //backGroundIcon.setImage(ImageIO.read(new File("./title.png"))); } catch (IOException e1) { e1.printStackTrace(); } //ImageIcon backGroundIcon = new ImageIcon("./title.png"); backGroundLabel = new JLabel(); backGroundLabel.setBounds(0, 0, backGroundIcon.getIconWidth(), backGroundIcon.getIconHeight()); backGroundLabel.setIcon(backGroundIcon); this.add(backGroundLabel); ```
退会済みユーザー

退会済みユーザー

2016/07/06 08:32 編集

閲覧くださった皆様、回答をくださったmasaya_ohashiさん、 ありがとうございました。
guest

0

img/title.pngの画像はどこに置いてありますか?
おそらくパスが誤っているのだと思われます。ImageIconはパスが間違っていてもエラーを吐かないので、以下のサイトを参考に、本当にimg/title.pngのパスに画像が存在するかを確認してから入れるようにしてみてください。createImageIconの処理のあたりです。
https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html

投稿2016/07/06 03:00

masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2016/07/06 04:12

閲覧、回答ありがとうございます。 相対パスを相対パスに変更してみました。 しかし、まだ画像は表示されないままです。 パネルの表示、ボタンの追加はできているため、 先ほど頂いたURLと画像表示の部分を照らし合わせてみます。
退会済みユーザー

退会済みユーザー

2016/07/06 04:16

誤記です。  相対パスを相対パスに変更してみました。  →相対パスを絶対パスに変更してみました。
退会済みユーザー

退会済みユーザー

2016/07/06 04:57

デバッグを試したところ、ご指摘通りImageIcon読み取りエラーでした。 (デバッグをせず質問してしまいました。。。ごめんなさい。。。) ImageIconの使用方法とパスをもう一度確認します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問