2

私は現在 Java に関する本を読んでおり、Swing のグラフィカル ユーザー インターフェイス コンポーネントについて勉強しています。そうしているうちに、作成者が非常に珍しい方法で JButton に画像を設定しているコード例に出くわしました。以下に示します。

Icon bug1 = new ImageIcon( getClass().getResource( "bug1.gif" ) );

上記を機能させるには、イメージを .class ファイルと同じフォルダーに置く必要があります。誰かがなぜ彼がこの特定のコードを使用しているのかを説明できますか(私が知る限り、それはリフレクションコードであるに違いありませんが、これについては特に確信が持てません)。彼のように物事を複雑にすることなく、同じことを?

4

3 に答える 3

4

あなたがそれらを理解していない場合にのみ、物事は複雑になります。上記のコードが何をするかを理解すれば、非常に簡単です。

getClass()現在のオブジェクトの Class オブジェクトを返します ( this)。getResource()上記のように相対パスで呼び出され、クラスパスで bug1.gif という名前のファイルを探し、呼び出された Class オブジェクトと同じパッケージでファイルを探します。したがって、上記のコードを含むクラスと同じパッケージで bug1.gif が検索されます。getResource()URL を返します。また、ImageIconコンストラクターは URL を引数として取り、この URL からイメージ バイトを読み込み、これらのバイトから ImageIcon を構築します。

したがって、このコードを呼び出すクラスと同じパッケージ内に、クラスパスから利用可能なファイルから ImageIcon を作成するだけです。これは理にかなっています。特定のクラスで使用されるイメージをクラスと同じパッケージに入れ、クラスとアプリケーションのイメージを含む jar をリリースします。

これらすべてのメソッドの javadoc を読むことで、これらすべてを自分で理解できたはずです。

于 2012-06-04T19:02:14.087 に答える
2

Class#getResource(String)クラスパスからリソースへの URL を返します。これは、アプリケーションの JAR ファイル内に保存されているリソースをロードする便利な方法です。イメージが HDD のどこかにある場合は、次を使用してロードできます。

new ImageIcon(new File("/path/to/the/image").toURI().toURL());

オブジェクトを作成し、そのFileパスを URL として取得します (のようになりますfile:///path/to/the/image)。

またはImageIcon、fileName を取るコンストラクターがあるので、さらに簡単です。

new ImageIcon("/path/to/the/image");
于 2012-06-04T18:59:24.910 に答える
2

Java の Swing は、複雑な問題を非常に迅速に乗り越えることができます。私は、彼が実際に単純化のためにこのコードを使用していると思います。

イメージ パスが相対パス (例のパス) の場合、イメージは、プログラムのコンパイル済みバイト コード (.class ファイル) と同じ場所に配置する必要があります。画像が他の場所にある場合、プログラムは単にそれを見つけることができませんでした.

このような相対パスは、完成したプロジェクトを JAR ファイルにコンパイルする場合に特に便利です。イメージは、すべての .CLASS ファイルとともに JAR に含まれます。コンパイル プログラムをダウンロードして実行すると、期待どおりにイメージが GUI に表示されます。

于 2012-06-04T18:59:25.413 に答える