質問編集履歴
1
調べたこと、実行できる文章にした。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -1,80 +1,209 @@
|
|
|
1
|
-
Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい調べても出てこなくて、質問することにしました。下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください
|
|
1
|
+
Javaについて質問です。JFrameの1つのJPanelに、二つのJLabel(ImageIcon)を追加したのですが、この画像どうしを重ねて表示したいんですけど、方法を30分ぐらい画像どうしを重ねる方法を調べても出てこなくて、質問することにしました。(外部URLなどは許可を取らないとかもなのではらないことにしました)下のプログラムがこんな感じが分かりやあすいかなぁ?て思いながらコピペしたプログラムです。(スパゲッティーソース)このプログラムについてわからないことがあったら、質問を質問で返してください。
|
|
2
2
|
|
|
3
3
|
```java
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
|
|
34
|
+
BufferedImage biMonster;
|
|
16
|
-
{
|
|
17
|
-
|
|
35
|
+
BufferedImage biPlayer;
|
|
18
36
|
|
|
19
|
-
if(e.getKeyCode() == KeyEvent.VK_1) {
|
|
20
|
-
addPicture();
|
|
21
|
-
|
|
37
|
+
int countdown = 4;
|
|
38
|
+
int Player_HP = 100;
|
|
39
|
+
int Bot_HP = 100;
|
|
22
|
-
|
|
40
|
+
int Time = 60;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
41
|
|
|
26
|
-
|
|
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
|
-
|
|
47
|
+
biPlayer = ImageIO.read(filep); //画像全体を読み込む
|
|
32
|
-
int ch = 800; //セルサイズ・高さ
|
|
33
|
-
|
|
48
|
+
setBounds(320, 180, 1280, 720); // フレームサイズを設定
|
|
49
|
+
setDefaultCloseOperation(EXIT_ON_CLOSE); // 閉じるボタン有効化
|
|
50
|
+
add(createBasePanel()); // 親パネルを作成し、フレームに貼り付け
|
|
34
|
-
|
|
51
|
+
setVisible(true); // フレームを表示状態へ
|
|
52
|
+
setLocationRelativeTo(null);
|
|
35
53
|
|
|
36
|
-
for(int i=0; i<e; i=i+1){
|
|
37
|
-
|
|
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
|
-
|
|
82
|
+
Font f = new Font(Font.MONOSPACED,
|
|
49
|
-
|
|
83
|
+
Font.BOLD,
|
|
50
|
-
|
|
84
|
+
64);
|
|
51
85
|
|
|
86
|
+
// レイアウト2行目
|
|
52
|
-
|
|
87
|
+
// パネルを作成し、親パネルに貼り付け
|
|
53
|
-
|
|
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,
|
|
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);
|
|
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
|
-
|
|
192
|
+
public class teststart
|
|
68
193
|
{
|
|
69
|
-
BufferedImage bs2 = biPlayer.getSubimage(cw*x, ch*y, cw, ch);
|
|
70
|
-
|
|
194
|
+
public static void main(String[] args) throws java.io.IOException
|
|
71
|
-
ImageIcon ii2 = new ImageIcon(im2); //JLabel用に型変換
|
|
72
|
-
|
|
195
|
+
{
|
|
73
|
-
|
|
196
|
+
System.out.println("起動しました。");
|
|
74
|
-
|
|
197
|
+
new test();
|
|
75
|
-
|
|
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を重ねて表示したいということです。なるべく説明と改善した文を記載して回答してくださると助かります。よろしくお願いいたします。( `・∀・´)ノヨロシク
|