質問編集履歴

1

文章の修正

2018/12/30 16:15

投稿

Dontes
Dontes

スコア13

test CHANGED
@@ -1 +1 @@
1
- JApplet paintcomponent画像参照方法 getCodeBase()?
1
+ JAppletを使ったコンポーネントで画像を表示したい
test CHANGED
@@ -1,35 +1,69 @@
1
- ### JApplet paintcomponentでの画像参照方法(URL?)
2
-
3
-
4
-
5
- java初心者の学生です。swingを用いたプログラミングについて勉強していて、JFrameでJPanelを実現するアプリケーションを作成していて、JApplet応用しようとしています。
6
-
7
- ゲームのほとんどはJAppletでそれっぽく出力することはできたのですが、画像だけが表示されませんでした。JAppletを継承したクラスでは、imageをgetCodeBase()でURLを取得して、paint(graphics);表示できる(?)と知ったのですが、Codeの構造上、JAppletを継承したMygame00←コンテナ←ゲームコントロール←キャラや敵で構成されていて、それぞれのクラスの先でg.drawImage()から描写してしまっていので、(↓↓のように
1
+ ### JApplet paintcomponentでの画像参照方法
2
+
3
+
4
+
5
+ JFrameでJPanelを実現するアプリケーションを作成していて、それをJApplet応用しようとしています。
6
+
7
+ しかし、画像だけが表示されませんでした。JAppletを継承したクラスでは、image型でデータ宣言してgetCodeBase()でURLを取得してg.drawimage出力できるそうですが、コンテナを用いて他の、JAppletを継承していないクラスからg.drawImageで画像を出せるようにできませんか?
8
8
 
9
9
  ```java
10
10
 
11
+ //import省略します
12
+
13
+ public class Mygame00 extends JApplet{
14
+
15
+ Container c ;
16
+
17
+ GameCtrl g;
18
+
11
- public INSEKI(){
19
+ public Mygame00(){
20
+
12
-
21
+ setTitle("game");
22
+
23
+ c = getContentPane();
24
+
25
+ c.setLayout(null);
26
+
27
+
28
+
29
+ g = new GameCtrl( );//ゲームコントロールを呼び出す
30
+
31
+ g.setBounds(10,10,1200,800);
32
+
33
+ g.setBackground(Color.WHITE);
34
+
35
+ c.add(g);
36
+
37
+ }
38
+
13
- public void INSEKIPaint(Graphics g){
39
+ public void init() {
40
+
14
-
41
+        setSize(1260,870);
42
+
15
- for(int i = 1;i <=cnt;i++){
43
+ JFrame w = new Mygame00();
44
+
16
-
45
+      w.setVisible(true);
46
+
47
+          w.getRootPane();
48
+
17
- g.drawImage(insekii,x[i],y[i],null);
49
+     w.setBounds(10, 10, 1200, 800);
18
-
50
+
51
+
52
+
19
- }//中略
53
+ }
20
54
 
21
55
  }
22
56
 
57
+
58
+
23
- ```
59
+ ```
24
-
25
- JAppletを継承していないこれらのクラスから画像を表示することが困難になっていると思います。うまくJAppletで画像を表示できませんでしょうか?基本的なアーキテクチャはできるだけ変更しないでいただけるとありがたいです...(理解が追いつかないので(_ _))やむを得ない場合は大改造してくれて結構です。宜しくお願いします。
60
+
26
-
27
-
28
-
29
- ↓↓↓JAppletから呼び出されるゲームコントロールクラス
61
+ ↓↓↓呼び出されるゲームコントロールクラス(一部)
30
62
 
31
63
  ```java
32
64
 
65
+
66
+
33
67
  public GameCtrl (){
34
68
 
35
69
  t = new Thread(this);
@@ -62,155 +96,123 @@
62
96
 
63
97
  addMouseWheelListener(this);}
64
98
 
99
+
100
+
101
+ public void paintComponent( Graphics g){
102
+
103
+ super.paintComponent(g);
104
+
105
+ charaL.charaLPaint(g);
106
+
107
+ Enemy.EnemyPaint(g);
108
+
109
+ bo.BoPaint(g);
110
+
111
+ CharaL.xy_calc();
112
+
113
+ CharaL.G();
114
+
115
+ Enemy.xy_calc();
116
+
117
+ Enemy.G();
118
+
119
+ Hou.xy_calc();
120
+
121
+ INSEKI.xy_calc();}
122
+
65
- ```
123
+ ```
66
-
124
+
67
- そして、同じgamecontrolにpaintComponentあり、
125
+ といった構造になっいます。(なおこのしたにKeyListenerとかオーバーライドされています)
126
+
127
+
128
+
129
+ ### 発生している問題・エラーメッセージ
130
+
131
+ ```
132
+
133
+ JAppletを継承したクラスでしか画像のURLを取得できないために、コンポーネントの中で画像が表示されない
134
+
135
+ ```
136
+
137
+
138
+
139
+ ### 該当のソースコード
140
+
141
+
142
+
143
+ ↓↓例えばBOクラスではこのようにしています。
144
+
145
+
68
146
 
69
147
  ```java
70
148
 
71
- public void paintComponent( Graphics g){
72
-
73
- super.paintComponent(g);
74
-
75
- charaL.charaLPaint(g);
76
-
77
- Enemy.EnemyPaint(g);
78
-
79
- bo.BoPaint(g);
80
-
81
- CharaL.xy_calc();
82
-
83
- CharaL.G();
84
-
85
- Enemy.xy_calc();
86
-
87
- Enemy.G();
88
-
89
- Hou.xy_calc();
90
-
91
- INSEKI.xy_calc();}
92
-
93
- ```
94
-
95
- といった構造になっています。(なお、このしたにKeyListenerとかがオーバーライドされています)
96
-
97
- (あっ、ついでにpaintcomponent paintcomponentsの違いも説明orわかりやすいリンクを教えていただければうれしいです。)
98
-
99
-
100
-
101
- ### 発生している問題・エラーメッセージ
102
-
103
-
104
-
105
- ```
106
-
107
- 画像が出ない
108
-
109
- ```
110
-
111
-
112
-
113
- ### 該当のソースコード
114
-
115
- ```java
116
-
117
- //元のJFrame
118
-
119
- //import省略します。
120
-
121
- public class Mygame00 extends JFrame{
122
-
123
- Container c ;GameCtrl g;
124
-
125
- public Mygame00(){
126
-
127
- setTitle("game");
128
-
129
- setSize(1260,870);
130
-
131
- setDefaultCloseOperation( EXIT_ON_CLOSE );
132
-
133
- c = getContentPane();
134
-
135
- c.setLayout(null);
136
-
137
-
138
-
139
- g = new GameCtrl( );
140
-
141
- g.setBounds(10,10,1200,800);
142
-
143
- g.setBackground(Color.WHITE);
144
-
145
- c.add(g);
146
-
147
- }
148
-
149
- public static void main(String[] args) {
150
-
151
- JFrame w = new Mygame00();
152
-
153
- w.setVisible(true);
154
-
155
- }
149
+ import java.awt.Graphics;
150
+
151
+ import java.awt.Image;
152
+
153
+ import java.util.Random;
154
+
155
+
156
+
157
+ import javax.swing.ImageIcon;
158
+
159
+
160
+
161
+ public class Bo implements MyData{
162
+
163
+ ImageIcon boIcon;
164
+
165
+ Image boIm;
166
+
167
+ Random r;
168
+
169
+ public Image insekii;
170
+
171
+ static int [][] bo;
172
+
173
+ public Bo(){
174
+
175
+ r = new Random();
176
+
177
+ boIcon = new ImageIcon("./Gazo00/bo.png");
178
+
179
+ boIm = boIcon.getImage();
180
+
181
+ bo = new int[][]{
182
+
183
+ {100,275,600,610},
184
+
185
+ {300,475,500,510},
186
+
187
+ {600,775,300,310}};
188
+
189
+
190
+
191
+
192
+
193
+ }
194
+
195
+ public void BoPaint( Graphics g ){
196
+
197
+ for(int i = 0;i<3;i++)
198
+
199
+ g.drawImage(insekii,bo[i][0],bo[i][2],null);
200
+
201
+ }
202
+
203
+ static void Bo_calc(){
204
+
205
+ for(int i = 0;i<3;i++)
206
+
207
+ {bo[i][2]+=3;bo[i][3]+=3;}
208
+
209
+ }
210
+
211
+
156
212
 
157
213
  }
158
214
 
159
- ////////////////////////////////////
160
-
161
- //これをJFrame からJAppletに変更する↓↓↓
162
-
163
- //import省略します
164
-
165
- public class Mygame00 extends JApplet{
166
-
167
- Container c ;
168
-
169
- GameCtrl g;
170
-
171
- public Mygame00(){
172
-
173
- setTitle("game");
174
-
175
- c = getContentPane();
176
-
177
- c.setLayout(null);
178
-
179
-
180
-
181
- g = new GameCtrl( );
182
-
183
- g.setBounds(10,10,1200,800);
184
-
185
- g.setBackground(Color.WHITE);
186
-
187
- c.add(g);
188
-
189
- }
190
-
191
- public void init() {
192
-
193
-        setSize(1260,870);
194
-
195
- JFrame w = new Mygame00();
196
-
197
-      w.setVisible(true);
198
-
199
-          w.getRootPane();//ここも全く理解できていないので説明できればしてほしいです。。。
200
-
201
-     w.setBounds(10, 10, 1200, 800);
202
-
203
-
204
-
205
- }
206
-
207
- }
208
-
209
-
210
-
211
- ```
215
+ ```
212
-
213
-
214
216
 
215
217
 
216
218
 
@@ -220,7 +222,7 @@
220
222
 
221
223
 
222
224
 
223
- JApplet継承クラスに移行しようとしようとしてみたり(何を移すべきかわからず断念)、JAppletやAppletについて調べてみましたが、有識者にご教授いただいた方が早い気がしてきて質問しています。
225
+ JApplet継承クラスに移行しようとしようとしてみたり(何を移すべきかわからず断念)、JAppletやAppletについて調べてみましたがだめでした。なお秒数計算と画像出力以外の処理はほとんどできています。
224
226
 
225
227
 
226
228