質問編集履歴

1 調べたこと、実行できる文章にした。

Helper

Helper score 10

2018/07/05 12:22  投稿

JavaのJFrameについて質問です。
Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい調べても出てこなくて、質問することにしました。下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください(このプログラムはerr出ます)
Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい画像どうしを重ねる方法を調べても出てこなくて、質問することにしました。(外部URLなどは許可を取らないとかもなのではらないことにしました)下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください。
```java
JPanel jpChild2;
BufferedImage biMonster;
BufferedImage biPlayer;
File file = new File("background.png"); //ファイルを開く
biMonster = ImageIO.read(file); //画像全体を読み込む
File filep = new File("player.png"); //ファイルを開く
biPlayer = ImageIO.read(filep); //画像全体を読み込む
protected void processKeyEvent(KeyEvent e)
test.java
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.Font;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.util.Timer;
import java.util.TimerTask;
public class test extends JFrame
{
if(e.getID() == KeyEvent.KEY_PRESSED)
 JLabel jlMain;
 JLabel jlMsg;
 JLabel jlChild;
 JLabel jlChild2;
 JLabel jlImage2;
 JPanel jpChild2;
 Timer timer;
 Timer timeer;
 BufferedImage biMonster;
 BufferedImage biPlayer;
 int countdown = 4;
 int Player_HP = 100;
 int Bot_HP = 100;
 int Time = 60;
 public test() throws IOException
 {
   File file = new File("background.png");  //ファイルを開く
   biMonster = ImageIO.read(file);         //画像全体を読み込む
   File filep = new File("player.png");   //ファイルを開く
   biPlayer = ImageIO.read(filep);       //画像全体を読み込む
   setBounds(320, 180, 1280, 720);         // フレームサイズを設定
     setDefaultCloseOperation(EXIT_ON_CLOSE);   // 閉じるボタン有効化
   add(createBasePanel());            // 親パネルを作成し、フレームに貼り付け
   setVisible(true);              // フレームを表示状態へ
   setLocationRelativeTo(null);
   enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK); // キー入力の有効化
 }
 protected void processKeyEvent(KeyEvent e)
 {
   if(e.getID() == KeyEvent.KEY_PRESSED)
   {
     System.out.println("キー"+e.getKeyCode()+"が押されたよ");
     
     if(e.getKeyCode() == KeyEvent.VK_1) {
       jpChild2.removeAll();
       addPicture();
       addPicturePlayer();
       jlMsg.setText("ここでプレイヤーを背景に重ねる");
   }
     if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
       System.exit(0);
     }
   }
 }
 
 /*
  * 基盤パネルを作成
  */
 JPanel createBasePanel() throws IOException
 {
   JPanel jp = createPanel(Color.GREEN);
   Font f = new Font(Font.MONOSPACED,
                        Font.BOLD,
                        64);
   // レイアウト2行目
   // パネルを作成し、親パネルに貼り付け
   jpChild2 = createPanel(Color.RED);
   jp.add(jpChild2);
   // 選択肢をパネルに貼り付け
   jlMain = new JLabel("1(キーボードのボタン)");
   jlMain.setFont(f);
   jlMain.setPreferredSize(new java.awt.Dimension(900, 300));
   jpChild2.add(jlMain);
   // 区切り線
   JPanel jpHR = createPanel(Color.WHITE);
   jpHR.setPreferredSize(new java.awt.Dimension(1200, 4));
   jp.add(jpHR);
   
   // レイアウト3行目   
   // ラベルを作成し、親パネルに貼り付け
   jlMsg = new JLabel("number for select");
   jlMsg.setFont(f);
   jlMsg.setForeground(new Color(255, 128, 0));
   jp.add(jlMsg);   
   return(jp);
 }
 
   /*
    * モンスターをパネルに加えます。
    */
   void addPicture()
   {
     java.util.Random r = new java.util.Random();
     // 敵出現
     int e = 1;
     // 敵グラフィック表示
     int cw = 1300;                     //セルサイズ・幅
     int ch = 800;                     //セルサイズ・高さ
     int sw = 1200;                     //表示サイズ・幅
     int sh = 590;                     //表示サイズ・高さ
     for(int i=0; i<e; i=i+1){
     putBackground(jpChild2, biMonster, 0, 0, cw, ch, sw, sh);
               //モンスター 0-0 表示
     }
     
     
     
   // メッセージ表示
     
   }
   void addPicturePlayer()
   {
     java.util.Random r = new java.util.Random();
     // 敵出現
     int e = 1;
     // 敵グラフィック表示
     int cw = 16;                     //セルサイズ・幅
     int ch = 27;                     //セルサイズ・高さ
     int sw = 30;                     //表示サイズ・幅
     int sh = 50;                     //表示サイズ・高さ
     for(int i=0; i<e; i=i+1){
     putPlayer(jpChild2, biPlayer, 0, 0, cw, ch, sw, sh);
               //モンスター 0-0 表示
     }
     
     
     
   // メッセージ表示
     
   }
   static JPanel createPanel(Color c)
   {
     JPanel jp = new JPanel();
     jp.setBackground(c);
     return(jp);
   }
   static void putBackground(JPanel jpChild2, BufferedImage biMonster, int x, int y, int cw, int ch, int sw, int sh)
   {
     BufferedImage bs = biMonster.getSubimage(cw*x, ch*y, cw, ch);
     Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
     ImageIcon ii = new ImageIcon(im);  //JLabel用に型変換
     JLabel jlImage = new JLabel(ii);   //画像部品を作成
     jlImage.setSize(sw, sh);       //画像サイズを設定
     jpChild2.add(jlImage);         //画像を貼り付け
   }
   static void putPlayer(JPanel jpChild2, BufferedImage biPlayer, int x, int y, int cw, int ch, int sw, int sh)
   {
     BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);
     Image im2 = bs2.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
     ImageIcon ii2 = new ImageIcon(im2);  //JLabel用に型変換
     JLabel jlImage2 = new JLabel(ii2);   //画像部品を作成
     jlImage2.setSize(sw, sh);               //画像サイズを設定
     //jlImage2.setLocation(100, 100);
     jpChild2.add(jlImage2);                 //画像を貼り付け
   }
}
```
```java
teststart.java
public class teststart
{
System.out.println("キー"+e.getKeyCode()+"が押されたよ");
if(e.getKeyCode() == KeyEvent.VK_1) {
addPicture();
addPicturePlayer();
   public static void main(String[] args) throws java.io.IOException
   {
       System.out.println("起動しました。");
       new test();
   }
}
}  
}  
 
void addPicture()  
{  
// 敵出現  
int e = 1;  
// 敵グラフィック表示  
int cw = 1300; //セルサイズ・幅  
int ch = 800; //セルサイズ・高さ  
int sw = 1200; //表示サイズ・幅  
int sh = 590; //表示サイズ・高さ  
 
for(int i=0; i<e; i=i+1){  
putBackground(jpChild2, biMonster, 0, 0, cw, ch, sw, sh);  
}  
}  
 
 
void addPicturePlayer()  
{  
// 敵出現  
int e = 1;  
// 敵グラフィック表示  
int cw = 16; //セルサイズ・幅  
int ch = 27; //セルサイズ・高さ  
int sw = 30; //表示サイズ・幅  
int sh = 50; //表示サイズ・高さ  
 
for(int i=0; i<e; i=i+1){  
putPlayer(jpChild2, biPlayer, 0, 0, cw, ch, sw, sh);  
}  
 
 
static void putBackground(JPanel jpChild2, BufferedImage biMonster, int x, int y, int cw, int ch, int sw, int sh)  
{  
BufferedImage bs = biMonster.getSubimage(cw*x, ch*y, cw, ch);  
Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);  
ImageIcon ii = new ImageIcon(im); //JLabel用に型変換  
JLabel jlImage = new JLabel(ii); //画像部品を作成  
jlImage.setSize(sw, sh); //画像サイズを設定  
jpChild2.add(jlImage); //画像を貼り付け  
}  
 
static void putPlayer(JPanel jpChild2, BufferedImage biPlayer, int x, int y, int cw, int ch, int sw, int sh)  
{  
BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);  
Image im2 = bs2.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);  
ImageIcon ii2 = new ImageIcon(im2); //JLabel用に型変換  
JLabel jlImage2 = new JLabel(ii2); //画像部品を作成  
jlImage2.setSize(sw, sh); //画像サイズを設定  
//jlImage2.setLocation(100, 100);  
jpChild2.add(jlImage2); //画像を貼り付け  
}  
 
```
コンパイル:javac *.java  
実行:java teststart  
 
背景:background.png  
プレイヤー:player.png  
↑は、適当にダウンロードした画像ファイルの名前を変えてフォルダに入れてください。  
 
つまり、jpChild2の中にある、jlImageとjlImage2を重ねて表示したいということです。なるべく説明と改善した文を記載して回答してくださると助かります。よろしくお願いいたします。( `・∀・´)ノヨロシク
  • Java

    23803 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る