Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

外部クラスのオブジェクト参照について

いつもお世話になっています。
早速ですが、質問させてください。
URL参照し、画像ファイルを表示するアプリケーションですが、
外部クラスのオブジェクトを参照する方法がなかなかわかりません。
アドバイスをお願いいたします。

import java.net.*; 
import java.awt.*; 
import java.awt.image.*; 
class BImageFrame extends Frame { 
    public BufferedImage bi = null; 
    public BImageFrame(URL url){ 
        Image img  = Toolkit.getDefaultToolkit().createImage(url); 
        MediaTracker tracker = new MediaTracker(this); 
        tracker.addImage(img, 0); 
        try{ 
            tracker.waitForID(0); 
        }catch(InterruptedException e){e.printStackTrace();} 
        int w = img.getWidth(null); 
        int h = img.getHeight(null); 

        this.bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
        Graphics g = bi.getGraphics(); 
        g.drawImage(img, 0, 0, this); 
        g.setColor(Color.blue); 
        g.drawRect(10,10, 30, 30); 
        g.drawString("HelloWorld", 20, 30); 
        g.dispose(); 
    } 
    public void paint (Graphics g){ 
        if(this.bi != null){ 
            g.drawImage(bi, 50,50, this); 
            g.drawRect(50,50, bi.getWidth(), bi.getHeight()); 
        } 
    } 
}

public class BImageFrameMain{ 
    public static void main(String[] args) throws MalformedURLException{ 
       URL url = new URL("http://ad.jp.ap.valuecommerce.com/vc/images/00/1e/ee/58.gif"); 
        Frame f = new BImageFrame(url); 
        f.setSize(f.bi.getWidth(),f.bi.getHeight()); //★ここでウィンドウのサイズをURLから読み込んだ画像の幅と高さで設定したいのです。
        f.setTitle("BufferedImage"); 
        f.setVisible(true); 
    }

3

回答

5338

閲覧

3件の回答

評価

0

1. biを持っているのはFrameではなくBImageFrameでは…?
2. mainはExceptionを投げません。
3. setSize()はFrame全体の大きさで、枠が考慮されません。

以下は、Frameのコンストラクタの処理です。
Labelなど(の継承クラス)を追加して、そのLabelに画像を描画するようにします。
Labelのサイズに画像のサイズを設定します(これはLabelのコンストラクタが良いかも)。
その後、pack()メソッドを呼び出します。

これで内容にぴったり合った大きさのFrameになります。

評価

0

ご返答ありがとうございます。
mio様のアドバイスを参考に実装してみたいと思いますが、
少し疑問に思っているのは、
Labelのサイズに画像のサイズを設定するだけで画像サイズとぴったり合うフレームができるのはよく分かりませんでした。
フレームのサイズを設定するのは、Mainメソッドのf.setSize()だと思いますが・・・

とりあえず、やってみますね。
ご丁寧に教えていただきまして
ありがとうございました。

評価

0

うーんと、最初にあげた箇条書きの3番目は、読んでもらえましたか?
setSize()ではうまくいかない、と書いたんですが。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。