- - PR -
他のファイルにあるクラスのメソッドを呼び出して描画するには?
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-09-14 18:08
こんにちは。
あるクラスから、他のファイルにあるJPanelのクラスを作成し、そのJPanelのクラスにある画像ファイルを呼び出して描画するメソッドを使用して、作成したJPanel上にそのファイルの画像を描きたいと思っているのですが、うまくいかず困っています。 具体的には、以下のような感じでやっています。 ----------------Control.java import java.awt.*; import javax.swing.*; public class Control extends JApplet { private Draw panel1 = new Draw(); // ここでこの後に書かれているDraw.javaクラスを作成 public void init() { Container c = getContentPane(); c.setLayout (new FlowLayout()); panel1.setPreferredSize(new Dimension(200, 200)); panel1.setBackground(Color.white); c.add(panel1); // ここでDrawクラスにあるメソッドを呼び出して画像を描画させる panel1.drawIcon(); // ここをコメントアウトするとパネルだけは正常に表示される } } ----------------Control.javaここまで ----------------Draw.java import java.awt.*; import javax.swing.*; public class Draw extends JPanel { private Image image; public void init() { Icon icon = new Icon(); } public void drawIcon() { Graphics g = this.getGraphics(); g.drawImage(image,50,50,this); } private class Icon extends JApplet // getImageを使用するためJAppletを継承 { public void init() { image = getImage(getDocumentBase(),"icon.gif"); } } } ----------------Draw.javaここまで コンパイルは通りますが、このプログラムを実行するとDrawクラス内でdrawImageを行った時点でNullPointerExceptionになってしまいます。 Control.javaの中にDraw.javaの内容を全て移動して一つのファイルにするとうまくいきます。(ある程度Draw.javaの内容を書き換えないとなりませんが) ただ、どうしても二つのファイルに分けて、Controlから命令を送ってDrawのほうで画像ファイルを呼び出して描かせたいのです。このようなことはできますか?何か構造自体が間違っているのでしょうか? [ メッセージ編集済み 編集者: fuzuki 編集日時 2003-09-14 18:18 ] | ||||||||
|
投稿日時: 2003-09-14 18:37
fuzukiさんこんにちは。
init()の中で描画処理をしようとしてるからではないでしょうか? paintComponent() で描画したらどうでしょう。 それと、Drawの内部クラスの JAppletの拡張はできますが、 サンドボックス(コンテキスト)との関連付けされてないと 思うように動作しないのではないでしょうか? あ、更に、Drawの init()はいつ呼び出されるのでしょうか? [ メッセージ編集済み 編集者: Kissinger 編集日時 2003-09-14 18:40 ] [ メッセージ編集済み 編集者: Kissinger 編集日時 2003-09-14 18:49 ] | ||||||||
|
投稿日時: 2003-09-14 19:14
直接、相互依存しているなどの問題はあり、あまり良い
例ではありませんが、こんな感じでわ? Control.java
Draw.java
| ||||||||
|
投稿日時: 2003-09-14 22:19
Kissingerさん、早速のご返事ありがとうございました。
最初のレスの内容を考えている間に例文までアップしていただき驚きました(^^ 例文のようにやったところ、うまくいきました。少し急いでいたので本当に助かりました。どうもありがとうございましたm(_ _)m | ||||||||
1
