
Java道|画像の読み込みと表示
文字だけの画面に、絵の力を加える。
画像を読み込んで表示できるようになると、JavaのGUIアプリはもっと分かりやすく、表情豊かな画面になります。
これまでのGUIアプリケーションでは、ウィンドウを表示したり、ラベルやボタンを置いたり、イベントに反応させたりしてきました。
Frame を使ってウィンドウを作る。
Label で文字を表示する。
Button を押したら表示を変える。
MouseListener でマウスの動きに反応する。
ここまで学ぶと、Javaでもかなりアプリケーションらしい画面を作れるようになります。
ただし、画面表現は文字やボタンだけではありません。
ウィンドウの中に画像を表示できるようになると、画面の雰囲気や分かりやすさが大きく変わります。
たとえば、鬼殺隊本部の修行案内盤を考えてみましょう。
文字だけで「きょうの修行イメージ」と表示されているよりも、そこに修行カードの絵や、任務記録の図、呼吸訓練を表すアイコンが表示されると、何を示している画面なのかが直感的に分かりやすくなります。
鬼滅の刃風にたとえると、これまでは本部の作戦室に、文字だけの案内札や操作札が並んでいた状態です。
そこに、修行の様子を描いたカードや、訓練場の図、隊士の任務イメージが表示されるようになると、画面は一気に生き生きします。
Javaでは、画像ファイルを読み込み、その画像をウィンドウの中に描画できます。
そのときに大切になるのが、次の要素です。
| 要素 | 役割 |
|---|---|
| Image | 読み込んだ画像を保持する型 |
| Toolkit | 画像などを扱うための道具を取得する |
| getImage | 画像ファイルを読み込む |
| paint | 画面に描画するときに呼ばれるメソッド |
| Graphics | 画像や文字や図形を描くための道具 |
| drawImage | 画像をウィンドウに描画する |
| drawString | 文字列をウィンドウに描画する |
この記事では、同じフォルダに置いた training.jpg という画像ファイルを読み込み、Sample5.java のウィンドウ内に表示する流れを、鬼滅の刃風の世界観でやわらかく整理していきます。
画像を表示するとはどういうことか
GUIアプリケーションで画像を表示するというのは、単に画像ファイルを用意するだけではありません。
Javaのプログラムから画像ファイルを読み込み、その画像を画面のどこに描くのかを指定する必要があります。
流れを整理すると、次のようになります。
| 手順 | 内容 | 鬼滅の刃風のイメージ |
|---|---|---|
| 1 | 画像ファイルを用意する | 修行カードの絵を用意する |
| 2 | プログラムから画像を読み込む | 記録棚から修行カードを取り出す |
| 3 | Image 型の変数に保持する | 取り出したカードを手元に置く |
| 4 | paint の中で描画する | 案内盤にカードを貼り出す |
| 5 | ウィンドウに画像が表示される | 隊士が案内盤で確認できる |
ここで大切なのは、画像の読み込みと表示は別の処理だという点です。
画像ファイルを読み込んだからといって、その瞬間に自動で画面に表示されるわけではありません。
読み込んだ画像を、paint メソッドの中で drawImage を使って描画することで、初めてウィンドウに表示されます。
鬼滅の刃風に言えば、修行カードを記録棚から持ってきただけでは、隊士たちには見えません。
そのカードを修行案内盤の決まった位置に貼り出すことで、はじめて画面に表示されるイメージです。
画像表示の基本は読み込みと描画に分かれる
画像表示は、大きく分けると2段階です。
| 段階 | 内容 | 使うもの |
|---|---|---|
| 読み込み | 画像ファイルをプログラムに取り込む | Toolkit、getImage、Image |
| 描画 | 読み込んだ画像を画面に表示する | paint、Graphics、drawImage |
この2つを分けて考えると、コードの役割が見えやすくなります。
読み込みは、主にコンストラクタの中で行います。
Toolkit tk = getToolkit();
im = tk.getImage("training.jpg");描画は、paint メソッドの中で行います。
public void paint(Graphics g)
{
g.drawImage(im, 115, 80, this);
}鬼滅の刃風に言えば、コンストラクタでは修行カードを準備し、paint ではその修行カードを案内盤に描くという役割分担です。
準備する場所と、実際に描く場所が分かれていることを意識すると、画像表示のしくみがかなり理解しやすくなります。
図:画像を読み込んで表示する基本の流れ
↓クリックすると拡大表示されます。

この図が示していること
この図では、画像ファイルがウィンドウに表示されるまでの流れを表しています。
まず training.jpg という画像ファイルを用意します。
次に Toolkit を使って画像を読み込み、Image 型の変数 im に保持します。
そして paint メソッドの中で Graphics の drawImage を使い、ウィンドウの指定位置に画像を描画します。
| 図の要素 | 意味 |
|---|---|
| training.jpg | 表示したい画像ファイル |
| Toolkit | 画像を読み込むための道具 |
| getImage | 画像ファイルを読み込むメソッド |
| Image im | 読み込んだ画像を保持する変数 |
| paint | 画面描画の中心になるメソッド |
| drawImage | 画像をウィンドウに描くメソッド |
この図から分かることは、画像表示は「画像を用意する」「読み込む」「保持する」「描画する」という段階を踏んで行われるということです。
画像を表示する例
ファイル名:Sample5.java
import java.awt.*;
import java.awt.event.*;
public class Sample5 extends Frame
{
Image im;
public static void main(String[] args)
{
Sample5 sm = new Sample5();
}
public Sample5()
{
super("鬼殺隊 修行カード表示");
// ツールキットを取得する
Toolkit tk = getToolkit();
// 画像ファイルを読み込む
im = tk.getImage("training.jpg");
addWindowListener(new SampleWindowListener());
setSize(420, 320);
setVisible(true);
}
public void paint(Graphics g)
{
// 画像をウィンドウに描画する
g.drawImage(im, 115, 80, this);
// 補足の文字も描画する
g.drawString("きょうの修行イメージ", 160, 60);
}
class SampleWindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
}ファイル名:training.jpg

このプログラムでできること
このプログラムを実行すると、「鬼殺隊 修行カード表示」というタイトルのウィンドウが表示されます。
ウィンドウの中には、training.jpg という画像ファイルが描画されます。
さらに、画像の上には「きょうの修行イメージ」という文字も表示されます。

このプログラムで行っていることを整理すると、次のようになります。
| できること | 内容 |
|---|---|
| ウィンドウを表示する | Frame を継承して画面を作る |
| 画像を読み込む | Toolkit と getImage を使う |
| 画像を描画する | paint の中で drawImage を使う |
| 文字も描画する | drawString を使う |
| 閉じる操作に対応する | WindowAdapter を使う |
| アプリを終了する | System.exit(0) を実行する |
鬼滅の刃風に言えば、鬼殺隊本部の作戦室に修行カード表示用の案内盤を設置し、training.jpg という修行カードを表示するアプリです。
案内盤の上部には「きょうの修行イメージ」という見出しも描かれ、画像が何を表しているのか分かりやすくなっています。
画像ファイルを用意する
画像を表示するには、まず画像ファイルが必要です。
今回の例では、training.jpg という画像ファイルを使います。
im = tk.getImage("training.jpg");この training.jpg は、プログラムを実行するときに見つけられる場所に置いておく必要があります。
学習段階では、Sample5.java と同じフォルダに training.jpg を置く形が分かりやすいです。
| 必要なファイル | 役割 |
|---|---|
| Sample5.java | Javaのプログラム |
| training.jpg | 表示する画像ファイル |
ファイル名が少しでも違うと、画像が正しく読み込まれないことがあります。
たとえば、training.jpg と書いているのに、実際のファイル名が Training.jpg や training.jpeg になっていると、環境によっては見つけられません。
| コード上の名前 | 実際のファイル名 | 結果 |
|---|---|---|
| training.jpg | training.jpg | 読み込みやすい |
| training.jpg | Training.jpg | 大文字小文字の違いで失敗する可能性がある |
| training.jpg | training.jpeg | 拡張子が違うため失敗する可能性がある |
鬼滅の刃風に言えば、修行カード棚から training.jpg という札を取り出す指示を出しているのに、棚に置いてある札の名前が違っていると、正しいカードを持ってこられないということです。
Image型の変数を用意する
Sample5.java では、クラスの中に Image 型の変数 im を用意しています。
Image im;Image は、画像データを扱うための型です。
読み込んだ画像を、この im という変数に入れておきます。
| 部分 | 意味 |
|---|---|
| Image | 画像を表す型 |
| im | 読み込んだ画像を指す変数 |
この im は、コンストラクタで画像を読み込むときにも使います。
im = tk.getImage("training.jpg");そして、paint メソッドで描画するときにも使います。
g.drawImage(im, 115, 80, this);つまり im は、読み込みと描画をつなぐ役割を持っています。
鬼滅の刃風に言えば、im は記録棚から取り出した修行カードを一時的に持っておくための札入れです。
読み込んだ画像を im に保持しておくことで、あとから paint の中でその画像を案内盤に描けます。
Toolkitとは何か
画像を読み込む前に、次の処理があります。
Toolkit tk = getToolkit();Toolkit は、AWTで画面表示や画像処理などを扱うための道具箱のような存在です。
画像を読み込むときにも、この Toolkit を使います。
| コード | 役割 |
|---|---|
| getToolkit | Toolkit を取得する |
| Toolkit tk | 取得した道具箱を tk という変数で扱う |
初心者の段階では、Toolkit を細かく難しく考えすぎなくても大丈夫です。
まずは、AWTで画像や画面まわりの機能を使うための道具箱と考えると分かりやすいです。
鬼滅の刃風に言えば、Toolkit は鬼殺隊本部の修行案内盤を操作するための共通道具箱です。
その道具箱を使って、画像カードを取り出したり、画面に関係する準備をしたりします。
getImageで画像を読み込む
実際に画像ファイルを読み込んでいるのが、次のコードです。
im = tk.getImage("training.jpg");このコードでは、Toolkit の getImage メソッドを使って、training.jpg という画像ファイルを読み込んでいます。
読み込んだ画像は、Image 型の変数 im に代入されます。
| 処理 | 役割 |
|---|---|
| tk.getImage("training.jpg") | training.jpg を画像として読み込む |
| im = ... | 読み込んだ画像を im に保持する |
ここで大事なのは、getImage は画像を準備する処理だという点です。
この時点では、まだ画像はウィンドウに表示されていません。
画面に表示するには、paint の中で drawImage を使う必要があります。
| 処理 | 役割 |
|---|---|
| getImage | 画像を読み込んで準備する |
| drawImage | 読み込んだ画像を画面に描く |
鬼滅の刃風に言えば、getImage は修行カードを棚から取り出して手元に置く作業です。
手元に持ってきただけでは、まだ案内盤には貼られていません。
案内盤に貼り出す作業が drawImage です。
コンストラクタで行っている準備
Sample5.java のコンストラクタでは、ウィンドウの初期設定と画像の読み込みを行っています。
public Sample5()
{
super("鬼殺隊 修行カード表示");
// ツールキットを取得する
Toolkit tk = getToolkit();
// 画像ファイルを読み込む
im = tk.getImage("training.jpg");
addWindowListener(new SampleWindowListener());
setSize(420, 320);
setVisible(true);
}流れを整理すると、次のようになります。
| 順番 | 処理 | 役割 |
|---|---|---|
| 1 | super("鬼殺隊 修行カード表示") | ウィンドウのタイトルを設定する |
| 2 | Toolkit tk = getToolkit() | 画像を扱う道具を取得する |
| 3 | im = tk.getImage("training.jpg") | 画像ファイルを読み込む |
| 4 | addWindowListener | 閉じる操作に対応する |
| 5 | setSize(420, 320) | ウィンドウの大きさを決める |
| 6 | setVisible(true) | ウィンドウを表示する |
コンストラクタは、修行カード表示盤を使える状態にする準備の場所です。
タイトルを付ける。
画像を読み込む。
閉じる操作を登録する。
大きさを決める。
画面に表示する。
この流れで、GUIアプリの初期設定が整います。
図:Sample5.javaで画像が表示されるまで
↓クリックすると拡大表示されます。

この図が示していること
この図では、Sample5.java の処理がどのように進み、画像がウィンドウに表示されるのかを表しています。
main で Sample5 オブジェクトを作ると、コンストラクタが呼ばれます。
コンストラクタでは、Toolkit を取得し、getImage で training.jpg を読み込み、Image 型の変数 im に保持します。
その後、ウィンドウが表示され、描画が必要になると paint が呼ばれます。
paint の中では、drawString で文字を描き、drawImage で画像を描画します。
| 図の要素 | 意味 |
|---|---|
| main | アプリ起動の入口 |
| new Sample5 | ウィンドウオブジェクトを作る |
| コンストラクタ | 初期設定と画像読み込みを行う |
| Image im | 読み込んだ画像を保持する |
| paint(Graphics g) | 画面に描画する場所 |
| drawString | 文字を描く |
| drawImage | 画像を描く |
この図から分かることは、画像表示では、コンストラクタで画像を準備し、paint の中で実際に描画するという役割分担があることです。
paintメソッドの役割
画像を実際に画面へ表示するために使うのが paint メソッドです。
public void paint(Graphics g)
{
// 画像をウィンドウに描画する
g.drawImage(im, 115, 80, this);
// 補足の文字も描画する
g.drawString("きょうの修行イメージ", 160, 60);
}paint は、ウィンドウの内容を描画するときに呼ばれる特別なメソッドです。
GUIでは、画面に表示したい文字や画像や図形を、この paint の中に書きます。
| メソッド | 役割 |
|---|---|
| paint | ウィンドウに描画する処理を書く |
| Graphics g | 描画するための道具 |
| drawImage | 画像を描く |
| drawString | 文字を描く |
ここで大切なのは、paint を自分で直接呼ぶのではなく、AWTが必要なタイミングで呼び出すということです。
たとえば、ウィンドウが表示されたときや、再描画が必要になったときに paint が呼ばれます。
鬼滅の刃風に言えば、paint は修行案内盤が「画面を描き直す必要がある」と判断したときに、記録係がカードや文字を描き直す場所です。
なぜpaintの中で描くのか
画像表示を学び始めると、次のように思うかもしれません。
コンストラクタで画像を読み込んでいるなら、そのまま表示すればよいのではないか。
しかし、JavaのGUIでは、画面に見えるものは描画タイミングに合わせて描く必要があります。
そのため、画像や文字の描画は paint の中に書きます。
画像を読み込む
↓
Image im に保持する
↓
画面表示が必要になる
↓
paint(Graphics g) が呼ばれる
↓
drawImage で画像を描く↓クリックすると拡大表示されます。

コンストラクタは準備の場所です。
paint は表示の場所です。
| 場所 | 役割 |
|---|---|
| コンストラクタ | 画像を読み込む、ウィンドウを準備する |
| paint | 読み込んだ画像や文字を画面に描く |
鬼滅の刃風に言えば、コンストラクタは修行カードを棚から出して準備する係です。
paint は、そのカードを案内盤に実際に貼り出す係です。
準備と表示を分けて考えることが、画像表示の大切なポイントです。
drawImageで画像を描画する
画像を描画している中心のコードは、次の1行です。
g.drawImage(im, 115, 80, this);このコードは、Image 型の変数 im に入っている画像を、ウィンドウの指定した位置に描画します。
| 部分 | 意味 |
|---|---|
| g | Graphics オブジェクト |
| drawImage | 画像を描画するメソッド |
| im | 描画する画像 |
| 115 | 横方向の位置 |
| 80 | 縦方向の位置 |
| this | 画像の描画を監視する対象 |
初心者の段階では、まず次のように理解すると十分です。
drawImageは、指定した画像を、指定した座標に表示するためのメソッド。
今回の場合、画像はウィンドウの左上から横に 115、縦に 80 の位置へ描かれます。
座標の数字を変えれば、画像の表示位置も変わります。
たとえば、もっと左上に表示したいなら、次のようにできます。
g.drawImage(im, 20, 50, this);| コード | 表示位置のイメージ |
|---|---|
| g.drawImage(im, 115, 80, this) | 少し中央寄りに表示 |
| g.drawImage(im, 20, 50, this) | より左上寄りに表示 |
| g.drawImage(im, 180, 120, this) | より右下寄りに表示 |
鬼滅の刃風に言えば、drawImage の座標は、修行カードを案内盤のどこに貼るかを決める位置指定です。
drawStringで文字を描く
今回のサンプルでは、画像だけでなく文字も描いています。
g.drawString("きょうの修行イメージ", 160, 60);drawString は、Graphics を使って文字列をウィンドウ内に描くメソッドです。
| 部分 | 意味 |
|---|---|
| drawString | 文字列を描く |
| きょうの修行イメージ | 描画する文字 |
| 160 | 横方向の位置 |
| 60 | 縦方向の位置 |
この文字は、画像の上に置く見出しのような役割を持っています。
画像だけを表示してもよいですが、説明文字があると、画像が何を表しているのかが分かりやすくなります。
鬼滅の刃風に言えば、修行カードの上に「きょうの修行イメージ」という見出し札を掲げている状態です。
GUIでは、画像と文字を組み合わせることで、より伝わりやすい画面を作れます。
Graphicsクラスとは何か
paint メソッドの引数にある Graphics g は、画面に何かを描くための道具です。
public void paint(Graphics g)Graphics を使うと、画像だけでなく、文字、線、四角形、円、多角形などを描くことができます。
鬼滅の刃風にたとえると、Graphics は修行案内盤に文字や絵や図形を書き込むための万能筆です。
| Graphicsでできること | 例 |
|---|---|
| 画像を描く | drawImage |
| 文字を描く | drawString |
| 線を描く | drawLine |
| 四角形を描く | drawRect |
| 楕円を描く | drawOval |
| 色を変える | setColor |
| フォントを変える | setFont |
Graphics は、ウィンドウの中に「何を、どこに、どんな見た目で描くか」を決めるために使います。
Graphicsクラスの主なメソッド
Graphics には、さまざまな描画用メソッドがあります。
よく使うものを整理すると、次のようになります。
| メソッド名 | 機能 |
|---|---|
| drawImage(Image img, int x, int y, ImageObserver observer) | 画像を描く |
| drawLine(int x1, int y1, int x2, int y2) | 線を描く |
| drawRect(int x, int y, int width, int height) | 四角形を描く |
| drawOval(int x, int y, int width, int height) | 楕円を描く |
| drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) | 円弧を描く |
| drawPolygon(int[] xPoints, int[] yPoints, int nPoints) | 多角形を描く |
| drawString(String str, int x, int y) | 文字列を描く |
| fillOval(int x, int y, int width, int height) | 塗りつぶした楕円を描く |
| fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) | 塗りつぶした円弧を描く |
| fillPolygon(int[] xPoints, int[] yPoints, int nPoints) | 塗りつぶした多角形を描く |
| setColor(Color c) | 色を設定する |
| setFont(Font font) | フォントを設定する |
鬼滅の刃風の修行案内盤で考えると、次のように使えます。
| メソッド | 鬼滅の刃風のイメージ |
|---|---|
| drawImage | 修行カードや任務図を表示する |
| drawLine | 修行ルートや移動経路を線で示す |
| drawRect | 情報パネルやメニュー枠を描く |
| drawOval | 呼吸集中の輪や訓練円を描く |
| drawString | 修行名や説明文を表示する |
| setColor | 注意色や通常色を切り替える |
| setFont | タイトルや説明文の見た目を変える |
このように、Graphics を使えるようになると、画像表示だけでなく、画面の中にさまざまな図解や説明を描けるようになります。
画像と文字を組み合わせる
Sample5.java では、画像と文字を同じ paint の中で描いています。
public void paint(Graphics g)
{
g.drawImage(im, 115, 80, this);
g.drawString("きょうの修行イメージ", 160, 60);
}このように、Graphics を使えば、画像だけでなく文字も同じ画面に描けます。
| 描画するもの | 使うメソッド |
|---|---|
| 画像 | drawImage |
| 文字 | drawString |
画像だけを表示すると、見た目は分かりやすくなります。
そこに文字を加えると、その画像が何を意味しているのかをさらに伝えやすくなります。
鬼滅の刃風に言えば、修行カードを案内盤に貼るだけでなく、その上に「きょうの修行イメージ」という見出し札を付けることで、隊士が内容を理解しやすくなります。
図:Graphicsで画像・文字・図形を描く
↓クリックすると拡大表示されます。

この図が示していること
この図では、Graphics がウィンドウに描画するための中心的な道具であることを表しています。
Graphics を使うことで、画像、文字、線、四角形、楕円などを描けます。
Sample5.java では、drawString で文字を描き、drawImage で training.jpg を描画しています。
| 図の要素 | 意味 |
|---|---|
| Graphics g | 描画のための道具 |
| drawImage | 画像を描く |
| drawString | 文字を描く |
| drawLine | 線を描く |
| drawRect | 四角形を描く |
| drawOval | 円や楕円を描く |
| setColor | 色を設定する |
| setFont | フォントを設定する |
この図から分かることは、Graphics を使うと、画像表示だけでなく、文字や図形を組み合わせた画面作りができるということです。
画像表示で気をつけたいこと
画像を扱うときは、いくつか気をつけたい点があります。
| 注意点 | 内容 |
|---|---|
| 画像ファイルの場所 | プログラムから見つけられる場所に置く |
| ファイル名 | コードに書いた名前と実際の名前を一致させる |
| 拡張子 | jpg、png、jpeg などを間違えない |
| 読み込みと描画の違い | getImage は準備、drawImage は表示 |
| paint の役割 | 画面に見えるものを描く場所 |
| 座標 | drawImage の x, y で表示位置が変わる |
特に、画像が表示されないときは、まずファイル名と置き場所を確認するとよいです。
im = tk.getImage("training.jpg");このコードなら、training.jpg という名前の画像を探します。
画像ファイルが別のフォルダにある場合や、名前が違う場合は、うまく表示できない可能性があります。
鬼滅の刃風に言えば、修行カードを表示したいのに、カード棚の場所や札の名前が違っていると、記録係が正しいカードを持ってこられない状態です。
座標で表示位置を決める
drawImage や drawString では、表示位置を数字で指定します。
g.drawImage(im, 115, 80, this);
g.drawString("きょうの修行イメージ", 160, 60);ここで使っている 115、80、160、60 は、ウィンドウ内での位置を表します。
| コード | 横位置 | 縦位置 |
|---|---|---|
| drawImage(im, 115, 80, this) | 115 | 80 |
| drawString("きょうの修行イメージ", 160, 60) | 160 | 60 |
基本的には、横方向の値を大きくすると右へ移動します。
縦方向の値を大きくすると下へ移動します。
| 値の変化 | 位置の変化 |
|---|---|
| x を大きくする | 右へ移動 |
| x を小さくする | 左へ移動 |
| y を大きくする | 下へ移動 |
| y を小さくする | 上へ移動 |
鬼滅の刃風に言えば、座標は修行案内盤のどの場所にカードや文字を貼るかを決める位置指定です。
画像表示の流れをコードで整理する
画像を表示するための流れを、コードの役割で整理しておきます。
| 手順 | コード | 役割 |
|---|---|---|
| 1 | Image im; | 画像を保持する変数を用意する |
| 2 | Toolkit tk = getToolkit(); | 画像を扱う道具を取得する |
| 3 | im = tk.getImage("training.jpg"); | 画像ファイルを読み込む |
| 4 | public void paint(Graphics g) | 描画処理を書く |
| 5 | g.drawImage(im, 115, 80, this); | 画像を画面に描く |
| 6 | g.drawString("きょうの修行イメージ", 160, 60); | 文字を画面に描く |
この流れが分かると、画像表示のコードを見たときに、どこで読み込み、どこで表示しているのかが分かりやすくなります。
特に大切なのは、次の対応です。
| 役割 | 使うもの |
|---|---|
| 画像を保持する | Image |
| 画像を読み込む | Toolkit、getImage |
| 画像を描く | Graphics、drawImage |
| 文字を描く | Graphics、drawString |
| 画面描画の場所 | paint |
ウィンドウを閉じる処理
Sample5.java でも、これまでと同じように、ウィンドウを閉じたときにアプリケーションを終了する処理があります。
addWindowListener(new SampleWindowListener());内部クラス SampleWindowListener では、WindowAdapter を継承しています。
class SampleWindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}この処理の流れは、次の通りです。
| 流れ | 内容 |
|---|---|
| 1 | ユーザーがウィンドウの閉じるボタンを押す |
| 2 | windowClosing が呼ばれる |
| 3 | System.exit(0) が実行される |
| 4 | アプリケーションが終了する |
鬼滅の刃風に言えば、修行カード表示盤の停止札が押されたときに、本部の支援隊士が装置を安全に止める仕組みです。
GUIアプリでは、画面を表示するだけでなく、閉じる操作に対応することも大切です。
画像・文字・図形を組み合わせる楽しさ
今回のテーマは画像の読み込みと表示ですが、Graphics を使うと画像だけでなく、文字や図形も同じ画面に描けます。
たとえば、修行案内画面なら、次のような組み合わせができます。
| 表示するもの | 使うメソッドの例 |
|---|---|
| 修行カード画像 | drawImage |
| 画面タイトル | drawString |
| カードの枠線 | drawRect |
| 呼吸集中の輪 | drawOval |
| 注意表示の色 | setColor |
| 見出しの文字 | setFont |
鬼滅の刃風の画面にすると、次のような表現が考えられます。
| 画面表現 | 内容 |
|---|---|
| 修行カード | きょうの修行イメージを画像で表示する |
| 見出し札 | 画像の上に説明タイトルを置く |
| 枠線 | 修行カードの周囲を囲む |
| 集中の輪 | 呼吸訓練を円で表現する |
| 注意文字 | 赤や青で案内を強調する |
このように、画像を表示できるようになると、GUIアプリの表現力が大きく広がります。
文字だけでは伝えにくい内容も、画像や図形を組み合わせることで直感的に伝えられます。
はじめて画像表示を学ぶときの見方
画像表示のコードは、最初は少し特別に見えるかもしれません。
しかし、役割で分けるとかなり整理しやすくなります。
| 見るポイント | 確認する場所 |
|---|---|
| 何を読み込んでいるか | training.jpg |
| どこに保持しているか | Image im |
| どの道具で読み込んでいるか | Toolkit、getImage |
| どこで描いているか | paint |
| 何を使って描いているか | Graphics |
| 画像の描画はどれか | drawImage |
| 文字の描画はどれか | drawString |
この見方に慣れると、画像表示のコードを読むときに迷いにくくなります。
鬼滅の刃風に整理すると、次のようになります。
| Javaの要素 | 鬼滅の刃風のイメージ |
|---|---|
| training.jpg | 修行カードの画像 |
| Image im | 修行カードを保持する札入れ |
| Toolkit | 画像を取り出す道具箱 |
| getImage | 修行カードを棚から取り出す処理 |
| paint | 案内盤に描く場所 |
| Graphics | 案内盤に描く万能筆 |
| drawImage | 修行カードを貼り出す処理 |
| drawString | 見出し札を書く処理 |
画像の読み込みと表示で大切な要素
今回の内容で大切な要素を整理すると、次の通りです。
| ポイント | 内容 |
|---|---|
| Image | 読み込んだ画像を保持する型 |
| Toolkit | 画像などを扱うための道具を取得する |
| getImage | 画像ファイルを読み込む |
| training.jpg | 表示する画像ファイル |
| paint | 画面描画のタイミングで呼ばれるメソッド |
| Graphics | 画像、文字、図形を描くための道具 |
| drawImage | 画像を画面に描画する |
| drawString | 文字列を画面に描画する |
| 座標 | 画像や文字の表示位置を決める |
| WindowAdapter | 閉じる操作に対応するために使う |
画像表示で一番大切なのは、読み込みと描画を分けて考えることです。
getImage で画像を読み込む。
Image 型の変数に保持する。
paint の中で drawImage を使って表示する。
この流れが分かると、JavaのGUIは文字や部品だけでなく、画像も使って表現できるようになります。
鬼滅の刃風に言えば、鬼殺隊本部の修行案内盤に、文字の案内札だけでなく、修行カードの絵も表示できるようになった状態です。
画面の中に画像が加わることで、アプリケーションはさらに分かりやすく、見て楽しいものになっていきます。
