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

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

ただいまの
回答率

90.33%

  • Java

    14427questions

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

JavaのJFrameについて質問です。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 103

kurisanda

score 1

Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい画像どうしを重ねる方法を調べても出てこなくて、質問することにしました。(外部URLなどは許可を取らないとかもなのではらないことにしました)下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください。

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
{
  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);                  //画像を貼り付け
    }
}
teststart.java


public class teststart
{
    public static void main(String[] args) throws java.io.IOException
    {
        System.out.println("起動しました。");
        new test();
    }
}


コンパイル:javac *.java
実行:java teststart

背景:background.png
プレイヤー:player.png
↑は、適当にダウンロードした画像ファイルの名前を変えてフォルダに入れてください。

つまり、jpChild2の中にある、jlImageとjlImage2を重ねて表示したいということです。なるべく説明と改善した文を記載して回答してくださると助かります。よろしくお願いいたします。( `・∀・´)ノヨロシク

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/07/05 12:45

    https://teratail.com/questions/134503 ????

    キャンセル

  • kurisanda

    2018/07/05 13:15

    ????

    キャンセル

  • mts10806

    2018/07/05 13:16

    なぜ、上記質問と全く同じ内容なのでしょうか。同一個人による複数アカウントであれば違反行為ですが。

    キャンセル

  • yukkuri

    2018/08/18 08:59

    mts10806さん、確かに垢は違いますけど質問内容が類似してますね。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14427questions

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