Java GUI アプリケーションでのイメージの処理
目次
このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
はじめに
アプリケーションでのイメージの処理は、多くの Java 初心者プログラマにとって共通の悩みです。Java アプリケーションでイメージにアクセスする標準的な方法は、getResource() メソッドを使用することです。このチュートリアルでは、IDE の GUI ビルダーを使用して、アプリケーションにイメージ (およびほかのリソース) を含めるためのコードを生成する方法を説明します。さらに、IDE でイメージ処理コードを生成する方法をどのようにカスタマイズするかについても学びます。
このチュートリアルで作成するアプリケーションは、単一のイメージを表示する JLabel を 1 つ含む、単純な JFrame です。
アプリケーションの作成
- 「ファイル」>「新規プロジェクト」を選択します。
- 新規プロジェクトウィザードで、「Java」>「Java アプリケーション」を選択し、「次へ」をクリックします。
- 「プロジェクト名」に「
ImageDisplayApp」と入力します。
- 「主クラスを作成」チェックボックスを選択解除します。
- 「主プロジェクトとして設定」チェックボックスが選択されていることを確認します。

- 「完了」をクリックします。
アプリケーションフォームの作成
このセクションでは、JFrame フォームを作成し、JLabel をフォームに追加します。
JFrame フォームを作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで、「ImageDisplayApp」ノードを展開します。
- 「ソースパッケージ」ノードを右クリックし、「新規」>「JFrame フォーム」を選択します。
- 「クラス名」に「
ImageDisplay」と入力します。
- 「パッケージ名」に「
org.me.myimageapp」と入力します。
- 「完了」をクリックします。
JLabel を追加するには、次の手順に従います。
- 「パレット」で「ラベル」コンポーネントを選択し、JFrame にドラッグします。
この段階で、フォームは次のイメージのように表示されているはずです。

イメージ用のパッケージの追加
アプリケーションでイメージまたはほかのリソースを使用する場合は、通常、リソース用の Java パッケージを別途作成します。ローカルファイルシステムでは、パッケージはフォルダに対応します。
イメージ用のパッケージを作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで、「
org.me.myimageapp」ノードを右クリックし、「新規」>「Java パッケージ」を選択します。

- 新規パッケージの作成ウィザードで、
.resources を org.me.myimageapp に追加します。これで、新しいパッケージは org.me.myimageapp.resources と呼ばれます。
- 「完了」をクリックします。
「プロジェクト」ウィンドウでは、org.me.myimageapp.resources パッケージ内にイメージが表示されているはずです。
ラベルでのイメージの表示
このアプリケーションでは、イメージが JLabel コンポーネント内に埋め込まれます。
イメージをラベルに追加するには、次の手順に従います。
- GUI デザイナで、フォームに追加したラベルを選択します。
- 「プロパティー」ウィンドウで、「プロパティー」カテゴリをクリックし、アイコンプロパティーまでスクロールします。
- 省略符号 (...) ボタンをクリックします。
- アイコンプロパティーのダイアログで、「プロジェクトにインポート」をクリックします。

- ファイル選択用ダイアログで、システム上にある、使用するイメージに移動します。「次へ」をクリックします。
- ウィザードの「ターゲットフォルダを選択」ページで、
resources フォルダを選択し、「完了」をクリックします。

「完了」をクリックしたあと、IDE では次が実行されます。
- イメージをプロジェクトにコピー。これで、アプリケーションを構築および配布するときには、イメージが配布可能 JAR ファイルに含まれます。
- イメージにアクセスするため、ImageDisplay クラスにコードを生成。
- フォームの「デザイン」ビューで、イメージをラベルに表示。
この段階で、次のような簡単な操作を実行し、フォームを見栄え良くできます。
- 「プロパティー」ウィンドウで、
text プロパティーを選択し、jLabel1 を削除します。この値は、ラベルの表示テキストとして、GUI ビルダーで生成されたものです。しかし、今はテキストではなくラベルを使用してイメージを表示しているため、テキストは必要ありません。
- ボタンをドラッグしてフォームの中央に配置します。
生成されたコードを表示するには、次の手順に従います。
- GUI デザイナで、「ソース」タブをクリックします。
- 「Generated Code」という行まで下にスクロールします。
- 「Generated Code」行の左にあるプラス記号 (+) をクリックし、GUI デザイナで生成されたコードを表示します。
主な行は次のとおりです。
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/me/myimageapp/resources/park-sculpture.jpg"))); // NOI18N
jLabel1 の Icon プロパティーにプロパティーエディタを使用したため、IDE では setIcon メソッドが生成されました。このメソッドのパラメータには、ImageIcon の匿名の内部クラスにある getResource() メソッドへの呼び出しが含まれます。生成されたイメージへのパスは、アプリケーションのパッケージ構造内での位置に対応します。
注
- アイコンプロパティーエディタで「外部イメージ」オプションを使用すると、IDE ではイメージをプロジェクトにコピーする代わりに、イメージへの絶対パスが生成されます。したがって、使用中のシステムでアプリケーションを実行するとイメージが表示されますが、別のシステムでアプリケーションを実行するとイメージは表示されない可能性があります。
getResource メソッドは、アプリケーションで必要になる可能性のあるデータを含むテキストファイルなど、ほかの種類のリソースにアクセスする場合にも便利です。
Jlabel に対するマウスイベントのイベントハンドラを登録するには:
「JLabel」を右クリックし、ポップアップメニューから「イベント」>「Mouse」>「mouseClicked/mousePressed/mouseReleased」を選択します。
対応するイベントのイベントハンドラが生成されます。
注: イベントハンドラでは、event.getPoint()、event.getX()、または event.getY() メソッドを使用してマウス座標 (たとえば、マウスクリックの場所) を取得できます。詳細は、「クラス MouseEvent」を参照してください。
フレームの背景としてのイメージの表示
Swing には JFrame の背景イメージに対する直接のサポートがないため、GUI ビルダーにも JFrame の背景イメージに対する直接のサポートはありません。
いずれにしても、このような目標を達成するためのさまざまな間接的な方法があります。このアプリケーションでは、イメージを含む JLabel が JFrame コンポーネント内に組み込まれる一方で、その JLabel の上に透明な JPanel が配置され、すべてのコンポーネントの親として使用されます。
イメージを含む JFrame に透明な JPanel を追加するには:
- 「ファイル」>「新規プロジェクト」を選択します。
- 新規プロジェクトウィザードで、「Java」>「Java アプリケーション」を選択し、「次へ」をクリックします。
- 「プロジェクト名」に「
BackgroundImageApp」と入力します。
- 「主クラスを作成」チェックボックスを選択解除します。
- 「主プロジェクトとして設定」チェックボックスが選択されていることを確認します。
- 「プロジェクト」ウィンドウで、「
BackgroundImageApp」ノードを展開します。
- 「ソースパッケージ」ノードを右クリックし、「新規」>「JFrame フォーム」を選択します。
- 「クラス名」に「
ImageDisplay」と入力します。
- 「パッケージ名」に「
org.me.mybackgroundapp」と入力します。
- 「完了」をクリックします。
- 「デザイン」ビューで「JFrame」を右クリックし、ポップアップメニューから「レイアウトを設定」>「グリッドバッグレイアウト」を選択します。
- 「JFrame」を右クリックし、ポップアップメニューから「パレットから追加」>「Swing コンテナ」>「パネル」を選択します。
- 「プロパティー」ウィンドウで、jPanel の「
opaque」プロパティーを選択解除します。
- 「JFrame」を右クリックし、ポップアップメニューから「パレットから追加」>「Swing コントロール」>「ラベル」を選択します。
- 「プロジェクト」ウィンドウで、「
org.me.mybackgroundapp」ノードを右クリックし、「新規」>「Java パッケージ」を選択します。
- 新規パッケージの作成ウィザードで、新しいパッケージの名前が
org.me.mybackgroundapp.resources になるように、「org.me.mybackgroundapp」に「.resources」を追加します。
- 「完了」をクリックします。
- GUI デザイナで、フォームに追加したラベルを選択します。
- 「プロパティー」ウィンドウで、「プロパティー」カテゴリをクリックし、アイコンプロパティーまでスクロールします。
- 省略符号 (...) ボタンをクリックします。
- アイコンプロパティーのダイアログで、「プロジェクトにインポート」をクリックします。
- ファイル選択用ダイアログで、システム上にある、使用するイメージに移動します。「次へ」をクリックします。
- ウィザードの「ターゲットフォルダを選択」ページで、resources フォルダを選択し、「完了」をクリックします。
- ナビゲータで、「jPanel」を右クリックし、ポップアップメニューから「プロパティー」を選択します。
- 「プロパティー」ダイアログボックスで、「
グリッド X」、「グリッド Y」、「ウエイト X」、および「ウエイト Y」プロパティーを「1」に設定し、「サイズ設定の方法 (Fill)」プロパティーを「両方」に設定します。「閉じる」をクリックします。
- jLabel に対して手順 24 と 25 を繰り返します。
背景が完了しました。たとえば、jLabel と jTextField をパレットから jPanel にドラッグできるようになりました。この両方が背景イメージの上に表示されます。

説明した対処方法の利点は、背景イメージがデザイン時と実行時の両方で表示されることです。
アプリケーションの構築と実行
これで、イメージにアクセスして表示するためのコードが生成されたので、アプリケーションを構築および実行し、イメージにアクセスしていることを確認できます。
まず、プロジェクトの主クラスを設定する必要があります。主クラスを設定すると、プロジェクトの実行時にどのクラスを実行するかが IDE で認識されます。さらに、アプリケーションの構築時に、アプリケーションの JAR ファイルの Main-Class 要素が確実に生成されます。
プロジェクトの主クラスを設定するには、次の手順に従います。
- ImageDisplayApp プロジェクトのノードを右クリックし、「プロパティー」を選択します。
- 「プロジェクトプロパティー」ダイアログで、「実行」カテゴリを選択します。
- 「主クラス」フィールドの横の「参照」ボタンをクリックします。次に、
org.me.myimageapp.ImageDisplay クラスを選択し、「主クラスを選択」ボタンをクリックします。
プロジェクトを構築するには、次の手順に従います。
- 「実行」>「主プロジェクトを削除して構築」を選択します。
アプリケーションの構築結果は、「ファイル」ウィンドウで確認できます。build フォルダには、コンパイル済みのクラスが格納されます。dist フォルダには、コンパイル済みのクラスとイメージを含む、実行可能な JAR ファイルが格納されます。
プロジェクトを実行する
- 「実行」>「主プロジェクトを実行」(F6) を選択します。
カスタムコードの作成
多くのアプリケーションでは、表示するイメージは、この例に示すように静的に決定されるわけではありません。たとえば、表示するイメージは、ユーザーがクリックする対象によって決まる場合があります。
表示するイメージをプログラムで選択できるようにする必要がある場合は、リソースにアクセスして表示するための、独自のカスタムコードを作成できます。IDE では、GUI ビルダーで生成されたコードを含むソースビューの「保護されたブロック」にコードを直接記述することはできません。ただし、「プロパティー」ウィンドウからアクセスできるプロパティーエディタから、保護されたブロックにコードを挿入できます。この方法でプロパティーエディタを使用すると、GUI ビルダーでデザインを変更してもカスタムコードが失われません。
たとえば、JLabel の icon プロパティーのカスタムコードを作成するには、次の手順に従います。
- 「デザイン」ビューまたは「インスペクタ」ウィンドウで JLabel を選択します。
- 「プロパティー」ウィンドウで、アイコンプロパティーの横にある省略符号ボタン (...) をクリックします。
- ダイアログの上部にあるドロップダウンリストから、「カスタムコード」オプションを選択します。
このプロパティーエディタの「カスタムコード」オプションを使用すると、setIcon メソッドのパラメータを入力できます。このパラメータは、必要なロジックを入力することも、クラスの別の場所で手動でコーディングした別のメソッドへの呼び出しを指定して入力することもできます。
まとめ
このチュートリアルでは、NetBeans IDE で作成するアプリケーションからイメージにアクセスする方法を説明しました。イメージの処理は、Java のチュートリアルでさらに説明します。
注: このチュートリアルの例は、Java チュートリアルのアイコンの使用方法の節にある最初の例とよく似ています。1 つ異なるのは、このチュートリアルで生成されるコードでは、アイコンをラベルに適用するために、JLabel の setIcon メソッドが使用される点です。Java チュートリアルの例では、アイコンはコンストラクタに渡されることでラベルに適用されます。
関連項目