質問編集履歴

1

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

2018/07/05 03:22

投稿

Helper
Helper

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,159 +1,417 @@
1
- Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい調べても出てこなくて、質問することにしました。下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください(このプログラムはerr出ます)
1
+ Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい画像どうしを重ねる方法を調べても出てこなくて、質問することにしました。(外部URLなどは許可を取らないとかもなのではらないことにしました)下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください
2
2
 
3
3
 
4
4
 
5
5
  ```java
6
6
 
7
- JPanel jpChild2;
7
+ test.java
8
-
8
+
9
+
10
+
11
+
12
+
9
- BufferedImage biMonster;
13
+ import java.awt.Color;
10
-
11
- BufferedImage biPlayer;
14
+
12
-
13
-
14
-
15
- File file = new File("background.png"); //ファイルを開く
16
-
17
- biMonster = ImageIO.read(file); //画像全体を読み込む
18
-
19
- File filep = new File("player.png"); //ファイルを開く
20
-
21
- biPlayer = ImageIO.read(filep); //画像全体を読み込む
22
-
23
-
24
-
25
- protected void processKeyEvent(KeyEvent e)
15
+ import java.awt.event.KeyEvent;
16
+
17
+ import java.awt.Font;
18
+
19
+ import java.awt.Image;
20
+
21
+ import java.awt.image.BufferedImage;
22
+
23
+ import java.awt.*;
24
+
25
+ import java.awt.image.*;
26
+
27
+ import java.io.File;
28
+
29
+ import java.io.IOException;
30
+
31
+ import javax.imageio.ImageIO;
32
+
33
+ import javax.swing.ImageIcon;
34
+
35
+ import javax.swing.JFrame;
36
+
37
+ import javax.swing.JLabel;
38
+
39
+ import javax.swing.JPanel;
40
+
41
+ import java.util.Timer;
42
+
43
+ import java.util.TimerTask;
44
+
45
+
46
+
47
+ public class test extends JFrame
26
48
 
27
49
  {
28
50
 
51
+ JLabel jlMain;
52
+
53
+ JLabel jlMsg;
54
+
55
+ JLabel jlChild;
56
+
57
+ JLabel jlChild2;
58
+
59
+ JLabel jlImage2;
60
+
61
+ JPanel jpChild2;
62
+
63
+ Timer timer;
64
+
65
+ Timer timeer;
66
+
67
+ BufferedImage biMonster;
68
+
69
+ BufferedImage biPlayer;
70
+
71
+
72
+
73
+ int countdown = 4;
74
+
75
+ int Player_HP = 100;
76
+
77
+ int Bot_HP = 100;
78
+
79
+ int Time = 60;
80
+
81
+
82
+
83
+ public test() throws IOException
84
+
85
+ {
86
+
87
+ File file = new File("background.png"); //ファイルを開く
88
+
89
+ biMonster = ImageIO.read(file); //画像全体を読み込む
90
+
91
+ File filep = new File("player.png"); //ファイルを開く
92
+
93
+ biPlayer = ImageIO.read(filep); //画像全体を読み込む
94
+
95
+ setBounds(320, 180, 1280, 720); // フレームサイズを設定
96
+
97
+ setDefaultCloseOperation(EXIT_ON_CLOSE); // 閉じるボタン有効化
98
+
99
+ add(createBasePanel()); // 親パネルを作成し、フレームに貼り付け
100
+
101
+ setVisible(true); // フレームを表示状態へ
102
+
103
+ setLocationRelativeTo(null);
104
+
105
+
106
+
107
+ enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK); // キー入力の有効化
108
+
109
+ }
110
+
111
+
112
+
113
+ protected void processKeyEvent(KeyEvent e)
114
+
115
+ {
116
+
29
- if(e.getID() == KeyEvent.KEY_PRESSED)
117
+ if(e.getID() == KeyEvent.KEY_PRESSED)
118
+
119
+ {
120
+
121
+ System.out.println("キー"+e.getKeyCode()+"が押されたよ");
122
+
123
+
124
+
125
+ if(e.getKeyCode() == KeyEvent.VK_1) {
126
+
127
+ jpChild2.removeAll();
128
+
129
+ addPicture();
130
+
131
+ addPicturePlayer();
132
+
133
+ jlMsg.setText("ここでプレイヤーを背景に重ねる");
134
+
135
+ }
136
+
137
+ if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
138
+
139
+ System.exit(0);
140
+
141
+ }
142
+
143
+ }
144
+
145
+ }
146
+
147
+
148
+
149
+ /*
150
+
151
+ * 基盤パネルを作成
152
+
153
+ */
154
+
155
+ JPanel createBasePanel() throws IOException
156
+
157
+ {
158
+
159
+ JPanel jp = createPanel(Color.GREEN);
160
+
161
+
162
+
163
+ Font f = new Font(Font.MONOSPACED,
164
+
165
+ Font.BOLD,
166
+
167
+ 64);
168
+
169
+
170
+
171
+ // レイアウト2行目
172
+
173
+ // パネルを作成し、親パネルに貼り付け
174
+
175
+ jpChild2 = createPanel(Color.RED);
176
+
177
+ jp.add(jpChild2);
178
+
179
+
180
+
181
+
182
+
183
+ // 選択肢をパネルに貼り付け
184
+
185
+ jlMain = new JLabel("1(キーボードのボタン)");
186
+
187
+ jlMain.setFont(f);
188
+
189
+ jlMain.setPreferredSize(new java.awt.Dimension(900, 300));
190
+
191
+ jpChild2.add(jlMain);
192
+
193
+
194
+
195
+ // 区切り線
196
+
197
+ JPanel jpHR = createPanel(Color.WHITE);
198
+
199
+ jpHR.setPreferredSize(new java.awt.Dimension(1200, 4));
200
+
201
+ jp.add(jpHR);
202
+
203
+
204
+
205
+ // レイアウト3行目
206
+
207
+ // ラベルを作成し、親パネルに貼り付け
208
+
209
+ jlMsg = new JLabel("number for select");
210
+
211
+ jlMsg.setFont(f);
212
+
213
+ jlMsg.setForeground(new Color(255, 128, 0));
214
+
215
+ jp.add(jlMsg);
216
+
217
+ return(jp);
218
+
219
+ }
220
+
221
+
222
+
223
+ /*
224
+
225
+ * モンスターをパネルに加えます。
226
+
227
+ */
228
+
229
+ void addPicture()
230
+
231
+ {
232
+
233
+ java.util.Random r = new java.util.Random();
234
+
235
+ // 敵出現
236
+
237
+ int e = 1;
238
+
239
+ // 敵グラフィック表示
240
+
241
+ int cw = 1300; //セルサイズ・幅
242
+
243
+ int ch = 800; //セルサイズ・高さ
244
+
245
+ int sw = 1200; //表示サイズ・幅
246
+
247
+ int sh = 590; //表示サイズ・高さ
248
+
249
+
250
+
251
+ for(int i=0; i<e; i=i+1){
252
+
253
+ putBackground(jpChild2, biMonster, 0, 0, cw, ch, sw, sh);
254
+
255
+ //モンスター 0-0 表示
256
+
257
+ }
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+ // メッセージ表示
266
+
267
+
268
+
269
+ }
270
+
271
+
272
+
273
+ void addPicturePlayer()
274
+
275
+ {
276
+
277
+ java.util.Random r = new java.util.Random();
278
+
279
+ // 敵出現
280
+
281
+ int e = 1;
282
+
283
+ // 敵グラフィック表示
284
+
285
+ int cw = 16; //セルサイズ・幅
286
+
287
+ int ch = 27; //セルサイズ・高さ
288
+
289
+ int sw = 30; //表示サイズ・幅
290
+
291
+ int sh = 50; //表示サイズ・高さ
292
+
293
+
294
+
295
+ for(int i=0; i<e; i=i+1){
296
+
297
+ putPlayer(jpChild2, biPlayer, 0, 0, cw, ch, sw, sh);
298
+
299
+ //モンスター 0-0 表示
300
+
301
+ }
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+ // メッセージ表示
310
+
311
+
312
+
313
+ }
314
+
315
+
316
+
317
+ static JPanel createPanel(Color c)
318
+
319
+ {
320
+
321
+ JPanel jp = new JPanel();
322
+
323
+ jp.setBackground(c);
324
+
325
+ return(jp);
326
+
327
+ }
328
+
329
+
330
+
331
+ static void putBackground(JPanel jpChild2, BufferedImage biMonster, int x, int y, int cw, int ch, int sw, int sh)
332
+
333
+ {
334
+
335
+ BufferedImage bs = biMonster.getSubimage(cw*x, ch*y, cw, ch);
336
+
337
+ Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
338
+
339
+ ImageIcon ii = new ImageIcon(im); //JLabel用に型変換
340
+
341
+ JLabel jlImage = new JLabel(ii); //画像部品を作成
342
+
343
+ jlImage.setSize(sw, sh); //画像サイズを設定
344
+
345
+ jpChild2.add(jlImage); //画像を貼り付け
346
+
347
+ }
348
+
349
+
350
+
351
+ static void putPlayer(JPanel jpChild2, BufferedImage biPlayer, int x, int y, int cw, int ch, int sw, int sh)
352
+
353
+ {
354
+
355
+ BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);
356
+
357
+ Image im2 = bs2.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
358
+
359
+ ImageIcon ii2 = new ImageIcon(im2); //JLabel用に型変換
360
+
361
+ JLabel jlImage2 = new JLabel(ii2); //画像部品を作成
362
+
363
+ jlImage2.setSize(sw, sh); //画像サイズを設定
364
+
365
+ //jlImage2.setLocation(100, 100);
366
+
367
+ jpChild2.add(jlImage2); //画像を貼り付け
368
+
369
+ }
370
+
371
+ }
372
+
373
+ ```
374
+
375
+ ```java
376
+
377
+ teststart.java
378
+
379
+
380
+
381
+
382
+
383
+ public class teststart
30
384
 
31
385
  {
32
386
 
387
+ public static void main(String[] args) throws java.io.IOException
388
+
389
+ {
390
+
33
- System.out.println("キー"+e.getKeyCode()+"が押され");
391
+ System.out.println("起動しまし");
34
-
35
-
36
-
37
- if(e.getKeyCode() == KeyEvent.VK_1) {
392
+
38
-
39
- addPicture();
393
+ new test();
40
-
394
+
41
- addPicturePlayer();
395
+ }
42
396
 
43
397
  }
44
398
 
45
- }
46
-
47
- }
48
-
49
-
50
-
51
- void addPicture()
52
-
53
- {
54
-
55
- // 敵出現
56
-
57
- int e = 1;
58
-
59
- // 敵グラフィック表示
60
-
61
- int cw = 1300; //セルサイズ・幅
62
-
63
- int ch = 800; //セルサイズ・高さ
64
-
65
- int sw = 1200; //表示サイズ・幅
66
-
67
- int sh = 590; //表示サイズ・高さ
68
-
69
-
70
-
71
- for(int i=0; i<e; i=i+1){
72
-
73
- putBackground(jpChild2, biMonster, 0, 0, cw, ch, sw, sh);
74
-
75
- }
76
-
77
- }
78
-
79
-
80
-
81
-
82
-
83
- void addPicturePlayer()
84
-
85
- {
86
-
87
- // 敵出現
88
-
89
- int e = 1;
90
-
91
- // 敵グラフィック表示
92
-
93
- int cw = 16; //セルサイズ・幅
94
-
95
- int ch = 27; //セルサイズ・高さ
96
-
97
- int sw = 30; //表示サイズ・幅
98
-
99
- int sh = 50; //表示サイズ・高さ
100
-
101
-
102
-
103
- for(int i=0; i<e; i=i+1){
104
-
105
- putPlayer(jpChild2, biPlayer, 0, 0, cw, ch, sw, sh);
106
-
107
- }
108
-
109
-
110
-
111
-
112
-
113
- static void putBackground(JPanel jpChild2, BufferedImage biMonster, int x, int y, int cw, int ch, int sw, int sh)
114
-
115
- {
116
-
117
- BufferedImage bs = biMonster.getSubimage(cw*x, ch*y, cw, ch);
118
-
119
- Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
120
-
121
- ImageIcon ii = new ImageIcon(im); //JLabel用に型変換
122
-
123
- JLabel jlImage = new JLabel(ii); //画像部品を作成
124
-
125
- jlImage.setSize(sw, sh); //画像サイズを設定
126
-
127
- jpChild2.add(jlImage); //画像を貼り付け
128
-
129
- }
130
-
131
-
132
-
133
- static void putPlayer(JPanel jpChild2, BufferedImage biPlayer, int x, int y, int cw, int ch, int sw, int sh)
134
-
135
- {
136
-
137
- BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);
138
-
139
- Image im2 = bs2.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
140
-
141
- ImageIcon ii2 = new ImageIcon(im2); //JLabel用に型変換
142
-
143
- JLabel jlImage2 = new JLabel(ii2); //画像部品を作成
144
-
145
- jlImage2.setSize(sw, sh); //画像サイズを設定
146
-
147
- //jlImage2.setLocation(100, 100);
148
-
149
- jpChild2.add(jlImage2); //画像を貼り付け
150
-
151
- }
152
-
153
-
154
-
155
399
  ```
156
400
 
401
+ コンパイル:javac *.java
402
+
403
+ 実行:java teststart
404
+
405
+
406
+
407
+ 背景:background.png
408
+
409
+ プレイヤー:player.png
410
+
411
+ ↑は、適当にダウンロードした画像ファイルの名前を変えてフォルダに入れてください。
412
+
413
+
414
+
157
415
 
158
416
 
159
417
  つまり、jpChild2の中にある、jlImageとjlImage2を重ねて表示したいということです。なるべく説明と改善した文を記載して回答してくださると助かります。よろしくお願いいたします。( `・∀・´)ノヨロシク