- ベストアンサー
フレームにJPEGを表示させたい
JAVAアプレットでフレームを作成しました。 そこにJPEGの画像を表示させようと思い、下記のようにしました。 class TestFrame extends Frame { Image image; TestFrame(String title) { super(title); setLayout(null); image = getImage(getDocumentBase(), "A1.jpg"); } public void paint(Graphics g){ g.drawImage(image,300,300,this); } } しかし、上記をコンパイルすると 「image = getImage(getDocumentBase(), "A1.jpg");」の所でコンパ イルエラーが発生しました。 色々調べた所「public URL getDocumentBase()ドキュメントの URL を返します。戻り値:アプレットを含んでいるドキュメントの URL」 と言うことでした。 つまりgetDocumentBaseが使えないみたいです。 ではどうやってフレームにJPEGの画像を表示させればいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まずはコンパイルエラーの原因から: TestFrameクラスはFrameクラスのサブクラスとして定義されてますね。getDocumentBaseはAppletクラスのメソッドですから、コンパイラは「TestFrameクラスにも、その基本クラスにもgetDocumentBaseなどというメソッドは定義されてないぞ!」とエラーにしているのでしょう。 解決策は: フレームにイメージを表示させるには、アプレットで getImage(getDocumentBase(),"A1.jpg") とやった結果(Imageクラスへの参照)を何らかの方法でフレームに渡してあげる必要があります。TestFrameクラスの定義をアプレットの中に入れてしまう(Innerクラスにする)のも解決策のひとつになるでしょう。 おまけ: nobi2000さんの回答ですけど、Imageはabstractクラスですから new Image(...) はできませんが、アプレットの getImage は実際にはImageクラスの派生クラスを返します。それをImageクラスの参照に代入することは何ら問題ありません。
その他の回答 (1)
絵を張ったことはないのですが…。 Imageってabstractクラスじゃないのかな…。 abstractクラスって、 継承してabstractメソッドをオーバーライドさせて使うものじゃなかったかとおもうのだけども…。 とりあえず、 ImageじゃなくてImageIcon使って ImageIcon image = new ImageIcon("A1.jpg"); みたいに書き換えたらよいのではないでしょおか。
お礼
フレームを内部クラスにすることによって、画像をフレームに表示することが 可能となりました。 色々ご親切にありがとうございました。
お礼
>getImage(getDocumentBase(),"A1.jpg") とやった結果(Imageクラスへの参 >照)を何らかの方法でフレームに渡してあげる必要があります。 私も自分の知っている限りの方法を使い、アプレットで取得した結果をフレームに 渡そうとしましたが、出来ませんでした。 内部クラスにすることによって、それが可能とは知らなかったので、フレームを 内部クラスにして、何とかフレームに画像を表示することを可能としました。 フレームを内部クラスにはしたくなかったのですが、この際やむを得ないですね。 色々ありがとうございました。