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

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

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

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

Swing

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

Q&A

解決済

1回答

544閲覧

画像を表示させたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Swing

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

0グッド

0クリップ

投稿2020/08/20 15:00

前提・実現したいこと

javaを勉強していて
シューティングゲームを作っています。

発生している問題・エラーメッセージ

shipの画像だけが表示されません。

該当のソースコード

PlayScene

1public class PlayScene extends JPanel 2{ 3 Ship ship = new Ship(); 4 Image play_bg = Toolkit.getDefaultToolkit().createImage("../img/play_bg.png");//背景画像 5 PlayScene() 6 { 7 add(ship); 8 } 9 10 public void paintComponent(Graphics g)//画像の描画 11 { 12 super.paintComponent(g); 13 g.drawImage(play_bg, 0, 0, this);//背景 14

Ship

1public class Ship extends JPanel implements KeyListener 2{ 3 Image ship = Toolkit.getDefaultToolkit().createImage("../img/ship.png");//画像 4 int ship_x = 350;//自機のX座標 5 int ship_y = 500;//自機のY座標 6 7 Ship() 8 { 9 ship = ship.getScaledInstance(50,50,1); 10 setFocusable(true); 11 addKeyListener(this); 12 } 13 14 public void paintComponent(Graphics g) 15 { 16 super.paintComponent(g); 17 g.drawImage(ship, ship_x, ship_y,this);//自機 18 } 19 20 public void keyPressed(KeyEvent e)//キーを押したときの処理 21 { 22 if(e.getKeyCode() == KeyEvent.VK_LEFT) 23 { 24 if(ship_x > 0) 25 { 26 ship_x = ship_x -10; 27 repaint(); 28 } 29 else 30 { 31 ship_x = 0; 32 repaint(); 33 } 34 } 35 if(e.getKeyCode() == KeyEvent.VK_RIGHT) 36 { 37 if(ship_x < 740) 38 { 39 ship_x = ship_x +10; 40 repaint(); 41 } 42 else 43 { 44 ship_x = 740; 45 repaint(); 46 } 47 } 48 if(e.getKeyCode() == KeyEvent.VK_UP) 49 { 50 if(ship_y > 0) 51 { 52 ship_y = ship_y -10; 53 repaint(); 54 } 55 else 56 { 57 ship_y = 0; 58 } 59 } 60 if(e.getKeyCode() == KeyEvent.VK_DOWN) 61 { 62 if(ship_y < 510) 63 { 64 ship_y = ship_y +10; 65 repaint(); 66 } 67 else 68 { 69 ship_y = 510; 70 repaint(); 71 } 72 } 73 74 } 75 76 public void keyReleased(KeyEvent e) 77 { 78 79 } 80 81 public void keyTyped(KeyEvent e) 82 { 83 84 } 85}

試したこと

画像のパスの確認
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
System.out.println("aaaa");
}
と書いてイベントが動くかどうか。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Shipはサイズが0になっています。だから見えません。
BorderLayoutで親サイズに広げるか、推奨サイズ(setPreferredSize)を設定するかでしょうか。

「おかしいな?」と思ったときはsetBackground(Color.YELLOW);等を入れて、一目でわかるようにするのがコツです。

mainがないので適当に作りました。

Java

1import java.awt.BorderLayout; 2import java.awt.Color; 3import java.awt.Dimension; 4import java.awt.Graphics; 5import java.awt.Image; 6import java.awt.Toolkit; 7import java.awt.event.KeyEvent; 8import java.awt.event.KeyListener; 9import javax.swing.JFrame; 10import javax.swing.JPanel; 11 12public class PlayScene extends JPanel { 13 public static void main(String[] args) { 14 JFrame f = new JFrame(); 15 f.add(new PlayScene()); 16 f.pack(); 17 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 f.setResizable(false); 19 f.setLocationRelativeTo(null); 20// f.setBackground(Color.RED); 21 f.setVisible(true); 22 } 23 24 Ship ship = new Ship(); 25 Image play_bg = Toolkit.getDefaultToolkit().createImage("../img/play_bg.png"); 26 27 PlayScene() { 28// setLayout(new BorderLayout()); 29// setBackground(Color.YELLOW); 30 add(ship); 31 } 32 33 @Override 34 public void paintComponent(Graphics g) { 35 super.paintComponent(g); 36 g.drawImage(play_bg, 0, 0, this); 37 } 38} 39 40class Ship extends JPanel implements KeyListener { 41 Image ship = Toolkit.getDefaultToolkit().createImage("../img/ship.png"); 42 int ship_x = 350; 43 int ship_y = 500; 44 45 Ship() { 46 ship = ship.getScaledInstance(50, 50, 1); 47 setFocusable(true); 48 addKeyListener(this); 49 50 setPreferredSize(new Dimension(740 + 50, 510 + 50)); 51 setOpaque(false); // 背景描画中止(透明化) 52// setBackground(Color.BLUE); 53 } 54 55 @Override 56 public void paintComponent(Graphics g) { 57 super.paintComponent(g); 58 g.drawImage(ship, ship_x, ship_y, this); 59 } 60 61 @Override 62 public void keyPressed(KeyEvent e) { 63 if (e.getKeyCode() == KeyEvent.VK_LEFT) { 64 if (ship_x > 0) { 65 ship_x = ship_x - 10; 66 } else { 67 ship_x = 0; 68 } 69 } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 70 if (ship_x < 740) { 71 ship_x = ship_x + 10; 72 } else { 73 ship_x = 740; 74 } 75 } else if (e.getKeyCode() == KeyEvent.VK_UP) { 76 if (ship_y > 0) { 77 ship_y = ship_y - 10; 78 } else { 79 ship_y = 0; 80 } 81 } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { 82 if (ship_y < 510) { 83 ship_y = ship_y + 10; 84 } else { 85 ship_y = 510; 86 } 87 } else { 88 return; 89 } 90 91 repaint(); 92 } 93 94 @Override public void keyReleased(KeyEvent e) { } 95 96 @Override public void keyTyped(KeyEvent e) { } 97}

GUIのレイアウトは何で作っても結構難しいですね。

投稿2020/08/20 16:09

TN8001

総合スコア9855

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

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

退会済みユーザー

退会済みユーザー

2020/08/20 21:16

ありがとうございます!無事画像が表示されました!背景色入れて確かめてみるといいのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問