質問するログイン新規登録

質問編集履歴

1

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

2018/07/05 03:22

投稿

Helper
Helper

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,80 +1,209 @@
1
- Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい調べても出てこなくて、質問することにしました。下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください(このプログラムはerr出ます)
1
+ Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい画像どうしを重ねる方法を調べても出てこなくて、質問することにしました。(外部URLなどは許可を取らないとかもなのではらないことにしました)下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください
2
2
 
3
3
  ```java
4
- JPanel jpChild2;
4
+ test.java
5
- BufferedImage biMonster;
6
- BufferedImage biPlayer;
7
5
 
8
- File file = new File("background.png"); //ファイルを開く
9
- biMonster = ImageIO.read(file); //画像全体を読み込む
10
- File filep = new File("player.png"); //ファイルを開く
11
- biPlayer = ImageIO.read(filep); //画像全体を読み込む
12
6
 
7
+ import java.awt.Color;
13
- protected void processKeyEvent(KeyEvent e)
8
+ import java.awt.event.KeyEvent;
9
+ import java.awt.Font;
10
+ import java.awt.Image;
11
+ import java.awt.image.BufferedImage;
12
+ import java.awt.*;
13
+ import java.awt.image.*;
14
+ import java.io.File;
15
+ import java.io.IOException;
16
+ import javax.imageio.ImageIO;
17
+ import javax.swing.ImageIcon;
18
+ import javax.swing.JFrame;
19
+ import javax.swing.JLabel;
20
+ import javax.swing.JPanel;
21
+ import java.util.Timer;
22
+ import java.util.TimerTask;
23
+
24
+ public class test extends JFrame
14
25
  {
26
+ JLabel jlMain;
27
+ JLabel jlMsg;
28
+ JLabel jlChild;
29
+ JLabel jlChild2;
30
+ JLabel jlImage2;
31
+ JPanel jpChild2;
32
+ Timer timer;
33
+ Timer timeer;
15
- if(e.getID() == KeyEvent.KEY_PRESSED)
34
+ BufferedImage biMonster;
16
- {
17
- System.out.println("キー"+e.getKeyCode()+"が押されたよ");
35
+ BufferedImage biPlayer;
18
36
 
19
- if(e.getKeyCode() == KeyEvent.VK_1) {
20
- addPicture();
21
- addPicturePlayer();
37
+ int countdown = 4;
38
+ int Player_HP = 100;
39
+ int Bot_HP = 100;
22
- }
40
+ int Time = 60;
23
- }
24
- }
25
41
 
26
- void addPicture()
42
+ public test() throws IOException
27
- {
43
+ {
28
- // 敵出現
44
+ File file = new File("background.png"); //ファイルを開く
29
- int e = 1;
30
- // 敵グラフィック表示
45
+ biMonster = ImageIO.read(file); //画像全体を読み込む
46
+ File filep = new File("player.png"); //ファイルを開く
31
- int cw = 1300; //セルサイズ・幅
47
+ biPlayer = ImageIO.read(filep); //画像全体を読み込む
32
- int ch = 800; //セルサイズ・高さ
33
- int sw = 1200; //表示サイズ・幅
48
+ setBounds(320, 180, 1280, 720); // フレームサイズを設定
49
+ setDefaultCloseOperation(EXIT_ON_CLOSE); // 閉じるボタン有効化
50
+ add(createBasePanel()); // 親パネルを作成し、フレームに貼り付け
34
- int sh = 590; //表示サイズ・高さ
51
+ setVisible(true); // フレームを表示状態へ
52
+ setLocationRelativeTo(null);
35
53
 
36
- for(int i=0; i<e; i=i+1){
37
- putBackground(jpChild2, biMonster, 0, 0, cw, ch, sw, sh);
54
+ enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK); // キー入力の有効化
38
- }
55
+ }
39
- }
40
56
 
57
+ protected void processKeyEvent(KeyEvent e)
58
+ {
59
+ if(e.getID() == KeyEvent.KEY_PRESSED)
60
+ {
61
+ System.out.println("キー"+e.getKeyCode()+"が押されたよ");
62
+
63
+ if(e.getKeyCode() == KeyEvent.VK_1) {
64
+ jpChild2.removeAll();
65
+ addPicture();
66
+ addPicturePlayer();
67
+ jlMsg.setText("ここでプレイヤーを背景に重ねる");
68
+ }
69
+ if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
70
+ System.exit(0);
71
+ }
72
+ }
73
+ }
74
+
75
+ /*
76
+ * 基盤パネルを作成
77
+ */
78
+ JPanel createBasePanel() throws IOException
79
+ {
80
+ JPanel jp = createPanel(Color.GREEN);
41
81
 
42
- void addPicturePlayer()
43
- {
44
- // 敵出現
45
- int e = 1;
46
- // 敵グラフィック表示
47
- int cw = 16; //セルサイズ・幅
48
- int ch = 27; //セルサイズ・高さ
82
+ Font f = new Font(Font.MONOSPACED,
49
- int sw = 30; //表示サイズ・幅
83
+ Font.BOLD,
50
- int sh = 50; //表示サイズ・高さ
84
+ 64);
51
85
 
86
+ // レイアウト2行目
52
- for(int i=0; i<e; i=i+1){
87
+ // パネルを作成し、親パネルに貼り付け
53
- putPlayer(jpChild2, biPlayer, 0, 0, cw, ch, sw, sh);
88
+ jpChild2 = createPanel(Color.RED);
54
- }
89
+ jp.add(jpChild2);
55
90
 
56
91
 
92
+ // 選択肢をパネルに貼り付け
93
+ jlMain = new JLabel("1(キーボードのボタン)");
94
+ jlMain.setFont(f);
95
+ jlMain.setPreferredSize(new java.awt.Dimension(900, 300));
96
+ jpChild2.add(jlMain);
97
+
98
+ // 区切り線
99
+ JPanel jpHR = createPanel(Color.WHITE);
100
+ jpHR.setPreferredSize(new java.awt.Dimension(1200, 4));
101
+ jp.add(jpHR);
102
+
103
+ // レイアウト3行目
104
+ // ラベルを作成し、親パネルに貼り付け
105
+ jlMsg = new JLabel("number for select");
106
+ jlMsg.setFont(f);
107
+ jlMsg.setForeground(new Color(255, 128, 0));
108
+ jp.add(jlMsg);
109
+ return(jp);
110
+ }
111
+
112
+ /*
113
+ * モンスターをパネルに加えます。
114
+ */
115
+ void addPicture()
116
+ {
117
+ java.util.Random r = new java.util.Random();
118
+ // 敵出現
119
+ int e = 1;
120
+ // 敵グラフィック表示
121
+ int cw = 1300; //セルサイズ・幅
122
+ int ch = 800; //セルサイズ・高さ
123
+ int sw = 1200; //表示サイズ・幅
124
+ int sh = 590; //表示サイズ・高さ
125
+
126
+ for(int i=0; i<e; i=i+1){
127
+ putBackground(jpChild2, biMonster, 0, 0, cw, ch, sw, sh);
128
+ //モンスター 0-0 表示
129
+ }
130
+
131
+
132
+
133
+ // メッセージ表示
134
+
135
+ }
136
+
137
+ void addPicturePlayer()
138
+ {
139
+ java.util.Random r = new java.util.Random();
140
+ // 敵出現
141
+ int e = 1;
142
+ // 敵グラフィック表示
143
+ int cw = 16; //セルサイズ・幅
144
+ int ch = 27; //セルサイズ・高さ
145
+ int sw = 30; //表示サイズ・幅
146
+ int sh = 50; //表示サイズ・高さ
147
+
148
+ for(int i=0; i<e; i=i+1){
149
+ putPlayer(jpChild2, biPlayer, 0, 0, cw, ch, sw, sh);
150
+ //モンスター 0-0 表示
151
+ }
152
+
153
+
154
+
155
+ // メッセージ表示
156
+
157
+ }
158
+
159
+ static JPanel createPanel(Color c)
160
+ {
161
+ JPanel jp = new JPanel();
162
+ jp.setBackground(c);
163
+ return(jp);
164
+ }
165
+
57
- static void putBackground(JPanel jpChild2, BufferedImage biMonster, int x, int y, int cw, int ch, int sw, int sh)
166
+ static void putBackground(JPanel jpChild2, BufferedImage biMonster, int x, int y, int cw, int ch, int sw, int sh)
58
- {
167
+ {
59
- BufferedImage bs = biMonster.getSubimage(cw*x, ch*y, cw, ch);
168
+ BufferedImage bs = biMonster.getSubimage(cw*x, ch*y, cw, ch);
60
- Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
169
+ Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
61
- ImageIcon ii = new ImageIcon(im); //JLabel用に型変換
170
+ ImageIcon ii = new ImageIcon(im); //JLabel用に型変換
62
- JLabel jlImage = new JLabel(ii); //画像部品を作成
171
+ JLabel jlImage = new JLabel(ii); //画像部品を作成
63
- jlImage.setSize(sw, sh); //画像サイズを設定
172
+ jlImage.setSize(sw, sh); //画像サイズを設定
64
- jpChild2.add(jlImage); //画像を貼り付け
173
+ jpChild2.add(jlImage); //画像を貼り付け
174
+ }
175
+
176
+ static void putPlayer(JPanel jpChild2, BufferedImage biPlayer, int x, int y, int cw, int ch, int sw, int sh)
177
+ {
178
+ BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);
179
+ Image im2 = bs2.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
180
+ ImageIcon ii2 = new ImageIcon(im2); //JLabel用に型変換
181
+ JLabel jlImage2 = new JLabel(ii2); //画像部品を作成
182
+ jlImage2.setSize(sw, sh); //画像サイズを設定
183
+ //jlImage2.setLocation(100, 100);
184
+ jpChild2.add(jlImage2); //画像を貼り付け
185
+ }
65
186
  }
187
+ ```
188
+ ```java
189
+ teststart.java
66
190
 
191
+
67
- static void putPlayer(JPanel jpChild2, BufferedImage biPlayer, int x, int y, int cw, int ch, int sw, int sh)
192
+ public class teststart
68
193
  {
69
- BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);
70
- Image im2 = bs2.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
194
+ public static void main(String[] args) throws java.io.IOException
71
- ImageIcon ii2 = new ImageIcon(im2); //JLabel用に型変換
72
- JLabel jlImage2 = new JLabel(ii2); //画像部品を作成
195
+ {
73
- jlImage2.setSize(sw, sh); //画像サイズを設定
196
+ System.out.println("起動しました。");
74
- //jlImage2.setLocation(100, 100);
197
+ new test();
75
- jpChild2.add(jlImage2); //画像を貼り付け
198
+ }
76
199
  }
77
-
78
200
  ```
201
+ コンパイル:javac *.java
202
+ 実行:java teststart
79
203
 
204
+ 背景:background.png
205
+ プレイヤー:player.png
206
+ ↑は、適当にダウンロードした画像ファイルの名前を変えてフォルダに入れてください。
207
+
208
+
80
209
  つまり、jpChild2の中にある、jlImageとjlImage2を重ねて表示したいということです。なるべく説明と改善した文を記載して回答してくださると助かります。よろしくお願いいたします。( `・∀・´)ノヨロシク