4
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


@SuppressWarnings("serial")
public class Picture extends JFrame{

    public static void main(String[] args){

        new Picture();

    }

    public Picture(){

        this.setTitle("Picture");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        ImageIcon pic = new ImageIcon("TestImage.jpg");
        p.add(new JLabel(pic));
        this.add(p);
        this.pack();
        this.setVisible(true);
        System.out.println(pic);
    }

}

このコードは、折りたたまれたフレームを表示するだけです。pack(); が メソッド呼び出しは、私の .jpg 画像の周りのフレームのサイズを変更しますよね?

最初の質問はすでに聞いています。はい、イメージはプロジェクト パッケージ フォルダーと同じフォルダーにあります。

Eclipse IDE を使用しています。

println(); も追加しました。Image 参照が何を返したかを確認するためのステートメントで、"TestImage.jpg" が返されます。メモリ内の画像のアドレスを返すと思いました.??

私は午前中ずっとフォーラムを読んでいますが、他の誰かのより複雑なコードをコピーして使用しない限り、そこで役立つものは何も見つかりません。私は自分自身を混乱させないように、これをできるだけ単純にしようとしています。

助けてくれてありがとう。

4

2 に答える 2

6

試す:

ImageIcon image = new ImageIcon(getClass().getResource("TestImage.jpg"));

詳細については、アイコンの使用方法のチュートリアル、特にgetResource を使用した画像の読み込みセクションを参照してください。

于 2012-08-04T22:31:04.180 に答える
5

画像は私のプロジェクトパッケージフォルダーと同じフォルダーにあります

それでおしまい。

書かれているように、プログラムはパッケージ階層ではなく、現在の作業ディレクトリで画像を探します。

コンストラクターの JavadocStringから、必要に応じて、指定されたファイル名からイメージを読み取ります。ただし、相対パスを指定すると、アプリケーションが実行されている作業ディレクトリに対して相対的に読み取ることを意味します。

これを回避するには、次の 2 つのオプションがあります。

  • IDE がプログラムを実行する作業ディレクトリに相対的なイメージ ファイル名を指定します。Eclipse はプロジェクトのルート ディレクトリでアプリケーションを実行し、ソース パッケージ階層のルートはsrc. この場合、 を指定すると機能しますsrc/TestImage.jpg。欠点は、別のディレクトリからプログラムを実行する場合、画像ファイルを一緒に移動する必要があることです。これは、JAR ファイルをドロップして実行することはできないため、配布/パッケージ化には不便です。

  • Java のリソース ローダーを使用して、パッケージ階層からイメージ ファイルを読み込みます。これを行うには、最初に使用します

    getClass().getResource("TestImage.jpg")
    

    画像の URL を取得します (パッケージ ルートからの相対パス)。画像を読み取るImageIconURL を受け入れるコンストラクターがあることを確認してください。したがって、次を使用して画像を読み取る必要があります

    new ImageIcon(getClass().getResource("TestImage.jpg"))
    

    パッケージ階層に相対的であることの利点は、プログラムを任意の場所から実行できることと、イメージを単一の JAR ファイルでアプリにバンドルできることです。

    余談ですが、コードとリソースの両方を (単にパッケージ ルートに配置するのではなく) 配置するパッケージを作成することをお勧めします。"com/example/someapp/TestImage.jpg"その場合は代わりに渡してください。

于 2012-08-04T22:30:29.513 に答える