1

Java の基本的なコードを練習するために netbeans IDE を使用しています。しかし、PNG画像の描画に失敗しました。以下は私のコードです、

package JavaApplication1;

import javax.swing.*;
import java.awt.*;

class MyCanvas extends JComponent
{
    Image img;
    public MyCanvas(){
        img = Toolkit.getDefaultToolkit().createImage("pengbrew.png");
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(img, 0, 0, null);
    }
}

public class JavaGame
{
    public static void main(String args[]){
        JFrame window = new JFrame("Image demo");
        window.getContentPane().add( new MyCanvas() );
        window.setSize(400,400);
        window.setVisible(true);
    }
}

netbeans プロジェクトに画像を追加しました。

お知らせ下さい。

どうもありがとう。

4

2 に答える 2

2

画像をロードするには、 を使用しますImageIO.read(File file)。これは新しい API であり、使いやすく、サポートも充実しています。さらにポインタが必要な場合は、画像のロードに関するチュートリアルがhttp://docs.oracle.com/javase/tutorial/2d/images/loadimage.htmlにあります。

代わりに、コードは次のようになります。

Image img;
public MyCanvas(){
    try {
        img = ImageIO.read(new File("pengbrew.png"));
    } catch (IOException e) {
        // Handle exception if there is one.
    }
}

使用していた方法が機能しなかった理由についての長い答えは、おそらく次の理由によるものです...

画像が適切な場所にある可能性がありますが、フレームが描画される前に Toolkit.createImage() が画像の読み込みを完了していません。Toolkit.createImage() は、基になるイメージのロードが実際に完了する前に、制御をアプリケーションに戻します。通常、アプリケーションのサイズを変更して強制的に再描画することで、これが問題かどうかを確認できます。アプリケーションのサイズを変更しようとして数秒後に画像が表示される場合は、最初のペイント呼び出し中に画像が読み込まれなかったことが原因です。

続行する前に画像がロードされていることを確認するには、MediaTracker を使用する必要があります。イメージを使用する前にロードが完了していることを確認するコードの例を次に示します。

Component component = new Component() {};
MediaTracker TRACKER = new MediaTracker(component);

...

Image image = Toolkit.getDefaultToolkit().createImage("imageToLoad.png");
synchronized(TRACKER) {
   int id = ++mediaTrackerID;
   TRACKER.addImage(image, id);
   try {
       TRACKER.waitForID(id, 0);
   } catch (InterruptedException ex) {
       image = null;
   }
   TRACKER.removeImage(image, id);
}
// Now you can use your image.

メソッド loadImage(Image image) の ImageIcon クラスに、このようなコードが表示されます。

于 2011-08-01T23:32:44.287 に答える
2

最も簡単な方法は、ここIcon/ImageIconの例に最適なJComponentsであるJLabelを探すことです

于 2011-07-30T17:02:39.767 に答える