アプリ版:「スタンプのみでお礼する」機能のリリースについて

 今晩は、java初心者です、宜しくお願いします。

 下のようなプログラムを書きましたが、画像がアプレットに表示されません。
 画像はeclipseで同じプロジェクト(フォルダ)内に置いています。
 文法上のエラーは出ておりません。
 原因がわかりません宜しくお願いします。

============================

public class Test extends Applet
{
MediaTracker tracker ;
Image img ;

public void init()
{
  tracker = new MediaTracker( this ) ;
img = getImage( getDocumentBase() , "a.jpg" ) ;
tracker.addImage( img , 0 ) ;
}

public void start()
{
             try
{
tracker.waitForAll();
}
catch (InterruptedException e) { }
}

public void paint( )
     {
Graphics g2 = getGraphics();
g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ;
}
}

A 回答 (5件)

paintを呼び出しているメソッドから見ます。



私ので言うと、
paintを呼び出す際、グラフィック情報を格納しているアドレス=1000番地を渡します。
paint(Graphics g2)によって、g2に1000番地が入ります。
g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; によって1000番地にimgが描かれます。

あなたので言うと、
paintを呼び出す際、グラフィック情報を格納しているアドレス=1000番地を渡します。(これは同じ)
paint()としてしまうと1000番地が受け取れません。
Graphics g2 = getGraphics();  は新しく取ったアドレス=1100番地に
g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ;  imgを書き込みます。
1000番地は変更されていません。
    • good
    • 0
この回答へのお礼

 maiko0318さん、回答有難う御座います、お礼が遅くなりすみません。
 色々と他の参考書なども読んでみましたが、やはり、よく理解できませんでした。

 >paint()としてしまうと1000番地が受け取れません。
 #ということは、paint( )と呼び出すときは、必ずpaint(Graphics g2)の型で使わなければならない
ということでしょうか。

 /*
public void ppaint2( )
{
Graphics g2 = getGraphics();
g2.drawImage( img , 50 , 50 , 150 , 150 , this ) ;
}
 */
のように書き換えてもやはりエラ-でした。
 宜しくお願いします。

お礼日時:2014/07/06 14:36

paintを呼び出しているメソッドは


Graphicsの情報があるアドレスを渡してきているのです。
それで、paint(Graphics g2) で受け取れるのです。
アドレスをもらっていますから、この中で中身を変更することで
imgをpaintを呼び出しているメソッドに返すことが出来るのです。

Graphics g2 = getGraphics();
g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ;

これは、新しくGraphicsタイプの領域を取り、imgを描いているだけであって
paintを呼び出しているメソッドに返ることはないのです。
    • good
    • 0
この回答へのお礼

 maiko0318さん、回答有難うございます。
 すみません、Javaの基本的内容が理解出来ていないようです、再度宜しくお願い致します。

 >paintを呼び出しているメソッドは
 >Graphicsの情報があるアドレスを渡してきているのです。

 #しかし、Graphics g2 = getGraphics();も、Graphicsの情報があるアドレスをg2に渡している
のではないのでしょうか。

 引数スタイル(? paint(Graphics g2)とGraphics g2 = getGraphics();との意味の違い
(>imgをpaintを呼び出しているメソッドに返すことが出来ない理由)が理解できません。

お礼日時:2014/07/04 14:52

>#paintのg2定義を直してもプログラムとしての構成は何も変わらないと思うのですが。



こちらでテストしたところ、直りましたが。

paintのパラメータ受け取りに指定したg2にdrawImageするのです。
受け取っていないものにdrawImageしてもpaintを抜ければ消えてしまいます。
    • good
    • 0
この回答へのお礼

maiko0318さん、回答有り難うございました。

再度確認しましたらうまく動作しました、早トチリですみませんでした。

ところで、私の書いたコードとmaiko0318さんの書いたコードの違いが判りません。

=========================================================
public void paint( )
{
Graphics g2 = getGraphics();
g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ;
}
==========================================================
# paintメソッドの中で、Graphics g2 ・・・・ローカル変数定義とGraphics()の取得、
  取得した、g2にdrawImageをしていますが。

この書き方では、g2はdrawImageを受け取れないのでしょうか。
ここの意味が理解できません、宜しくお願いします。

お礼日時:2014/07/04 12:51

paintのg2定義を直せばいいです。



public void paint(Graphics g2)
{
g2 = getGraphics();
g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ;
}
    • good
    • 0
この回答へのお礼

 maiko0318さん、回答有難うございます。

 回答のとおりにコードを変更しましたが、何も変化ありません。

 >paintのg2定義を直せばいいです。

 #paintのg2定義を直してもプログラムとしての構成は何も変わらないと思うのですが。

お礼日時:2014/07/04 00:05

これだけですと、状況がわからないので何とも原因が特定しにくいです。

とりあえずチェックポイントだけ。

・a.jpgはどこにありますか。htmlファイルと同じ場所ですか。

・getDocumentBaseでなく、getCodeBaseでコードの配置場所に置いた場合もやはり読み込めませんか?

・Eclipseは実行する際、ビルドしたプログラムを別の場所に保存して実行しますが、ちゃんとイメージもそこに配置できていますか。

・プログラムはどういう形になっていますか。クラスファイルがそのままおかれていますか、Jarにまとめられていますか。

以上を確認してみてください。この種の問題で一番多いのは、画像ファイルが正しく配置できておらず読み込めない、というものです。次に多いのは、Jarファイルにプログラムをまとめているためにファイルが読めない(Jarにまとめるとファイルでなくリソースとして読み込まないといけない)。以上の2つが原因の大半を占めると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!