
Java道|16章のまとめ
Javaの基礎が、見える・動く・反応するアプリへ変わる。
16章は、文法やオブジェクト指向で学んだ力を、GUIアプリケーションとして形にするための大切な実践章です。
16章では、これまで学んできたJavaの文法やオブジェクト指向の考え方が、実際に「見えるアプリケーション」として形になっていく流れを学びました。
それまでの学習では、コンソールに文字を表示したり、条件分岐や繰り返しで処理を組み立てたり、クラスやオブジェクトを使ってプログラムを整理したりすることが中心でした。
System.out.println("修行を開始します");このような文字中心のプログラムも、Javaの基礎としてとても大切です。
しかし、16章ではそこから一歩進みました。
ウィンドウを表示する。
ラベルやボタンを配置する。
ボタンやマウス操作に反応する。
画像や図形を描く。
クリックした場所に印を描く。
スレッドを使って時間とともに画面を変化させる。
そして、Javaの学習がスマートフォンアプリやWebアプリケーションのような応用分野へつながることも見てきました。
鬼滅の刃風にたとえると、これまでのJava学習は、鬼殺隊本部の修行場で基礎の型をひとつずつ覚えてきた段階です。
変数は、任務に必要な情報を記録する巻物。
条件分岐は、状況に応じて行動を変える判断力。
繰り返しは、同じ型を何度も鍛える反復修行。
クラスとオブジェクトは、隊士や道具を役割ごとに整理する設計図です。
そして16章では、その基礎を使って、本部の修行装置や作戦案内盤のような「見える画面」を作る段階に入りました。
ただ命令を順番に実行するだけでなく、ユーザーがボタンを押したら反応する。
マウスを動かしたら表示が変わる。
時間の流れに合わせて画面が更新される。
つまり、16章はJavaの知識が「動くアプリ」として実感できる章でした。ここでは、16章で学んだ内容を、鬼滅の刃風の世界観に置き換えながら整理していきます。
16章で学んだことの全体像
16章の内容を大きく整理すると、次のようになります。
| 学んだ内容 | できるようになったこと | 鬼滅の刃風のイメージ |
|---|---|---|
| ウィンドウの作成 | 画面を持つアプリを作れる | 鬼殺隊本部に修行案内盤を設置する |
| AWTコンポーネント | ラベルやボタンなどの部品を置ける | 案内札や開始札を配置する |
| イベント処理 | ボタンやマウス操作に反応できる | 隊士の操作に修行装置が反応する |
| 無名クラスやラムダ式 | イベント処理を簡潔に書ける | 臨時の制御係や短い指令札を使う |
| 描画処理 | 文字、図形、画像を画面に描ける | 作戦盤に印や修行カードを描く |
| repaint | 画面を描き直す依頼ができる | 表示盤へ再描画の伝令を送る |
| スレッド | 時間の流れを持つ表示を作れる | 修行段階を一定時間ごとに進める |
| 応用分野 | Javaの学習が実践へつながる | 本部装置や携帯任務札の開発へ広がる |
この一覧を見ると、16章は単に「ウィンドウを出すだけ」の章ではなかったことが分かります。
最初は、空のウィンドウを表示するところから始まりました。
そこにLabelやButtonなどの部品を配置し、ユーザー操作に反応するイベント処理を加え、Graphicsで文字や図形や画像を描き、さらにスレッドで時間に合わせた変化も作りました。
流れとしては、次のように広がっています。
ウィンドウを作る
↓
部品を置く
↓
操作に反応する
↓
画面に描く
↓
時間で動かす
↓
応用分野へつなげる鬼滅の刃風に言えば、最初はただの修行部屋だったものが、案内札、操作札、記録盤、描画装置、自動更新機能を持つ本格的な修行装置へ育っていったような流れです。
↓クリックすると拡大表示されます。

ウィンドウを持つアプリケーションを作れるようになった
16章の最初で学んだ大きな一歩は、ウィンドウを表示することでした。
それまでのJavaプログラムでは、コンソールに文字を出す形が中心でした。
しかし、GUIアプリでは、Frameを使って画面そのものを表示できます。
public class Sample1 extends FrameFrameは、ウィンドウ本体を表すクラスです。
このFrameを継承することで、自分のクラスをウィンドウとして扱えるようになりました。
ウィンドウを表示する基本の流れは、次のように整理できます。
| 手順 | 内容 |
|---|---|
| 1 | Frameを継承したクラスを作る |
| 2 | mainでオブジェクトを作る |
| 3 | コンストラクタでタイトルを設定する |
| 4 | setSizeで大きさを決める |
| 5 | setVisible(true)で表示する |
| 6 | WindowAdapterで閉じる操作に対応する |
鬼滅の刃風にたとえると、Frameは鬼殺隊本部の「修行案内盤の土台」です。
土台を作り、名前札を付け、大きさを決め、隊士たちの前に表示する。
これが、GUIアプリの最初の形です。
| Javaの要素 | 鬼滅の刃風のイメージ |
|---|---|
| Frame | 修行案内盤の本体 |
| super | 案内盤のタイトル札 |
| setSize | 案内盤の大きさを決める |
| setVisible(true) | 案内盤を作戦室に表示する |
| WindowAdapter | 閉じる操作を見張る補助係 |
| windowClosing | 停止札が押されたときの処理 |
ここで大切なのは、Javaのプログラムが「文字だけの世界」から「目で見える画面の世界」へ進んだことです。
ウィンドウを表示できるようになると、プログラムはユーザーが直接見て操作できるアプリケーションに近づきます。
AWTの部品を使って画面らしさを作れるようになった
ウィンドウを表示できても、何も置かれていない画面では、まだ使いやすいアプリとは言えません。
そこで学んだのが、AWTコンポーネントです。
コンポーネントとは、GUI画面に置く部品のことです。
| AWTの部品 | 役割 | 鬼滅の刃風のイメージ |
|---|---|---|
| Label | 文字を表示する | 修行内容の案内札 |
| Button | 押して操作する | 修行開始札 |
| TextField | 1行入力する | 隊士名の入力欄 |
| TextArea | 複数行入力する | 任務メモ欄 |
| List | 一覧を表示する | 隊士一覧板 |
| Panel | 部品をまとめる | 装置をまとめる区画 |
| Canvas | 図形や絵を描く | 作戦図を描く板 |
たとえばLabelを使うと、画面に案内文を表示できます。
Label lb = new Label("次の修行場へ移動します");
add(lb);ここで大切なのは、コンポーネントは作っただけでは表示されないことです。
new Labelで部品を作り、addでFrameに追加する必要があります。
| 処理 | 意味 |
|---|---|
| new Label | 案内札を作る |
| add(lb) | 案内札を修行案内盤に取り付ける |
| setForeground | 文字色を変える |
| setFont | 文字の見た目を変える |
鬼滅の刃風に言えば、修行案内札を作っただけで倉庫に置いていても、隊士には見えません。
それを作戦案内盤に取り付けて、色や文字の大きさを整えることで、はじめて「使える画面」になります。
図:16章前半 ウィンドウと部品で画面を作る
↓クリックすると拡大表示されます。

この図が示していること
この図は、16章前半で学んだ「ウィンドウに部品を配置してGUI画面を作る流れ」を表しています。
Frameはウィンドウの土台です。
そこにLabel、Button、TextField、Panelなどのコンポーネントを追加して、使える画面にしていきます。
| 図の要素 | 意味 |
|---|---|
| Frame | GUI画面の土台 |
| Label | 文字を表示する部品 |
| Button | 押して操作する部品 |
| TextField | 文字入力の部品 |
| Panel | 部品をまとめる区画 |
| add | 作った部品を画面に配置する処理 |
この図から分かることは、GUIアプリはウィンドウだけで完成するのではなく、部品を組み合わせて画面を作るということです。
鬼滅の刃風に言えば、空の修行部屋に案内札や開始札を配置して、隊士が使える修行装置にしていくイメージです。
イベント処理によって画面が反応するようになった
16章の中でも特に重要だったのが、イベント処理です。
イベントとは、GUI上で起きる出来事のことです。
たとえば、次のような操作がイベントになります。
| 操作 | イベントの例 |
|---|---|
| ボタンを押す | ActionEvent |
| マウスが部品に入る | MouseEvent |
| マウスが部品から出る | MouseEvent |
| マウスで画面を押す | MouseEvent |
| ウィンドウを閉じる | WindowEvent |
イベント処理を学ぶことで、GUI画面は「ただ表示されるだけ」ではなく、「ユーザーの操作に反応する画面」になりました。
たとえば、Buttonを押したときに文字を変える処理では、ActionListenerを使いました。
bt.addActionListener(new SampleActionListener());この登録によって、ボタンが押されたときにactionPerformedが呼ばれます。
イベント処理の基本構造は、次の3つで整理できます。
| 役割 | 内容 | 鬼滅の刃風のイメージ |
|---|---|---|
| ソース | イベントが発生する部品 | 修行開始札、修行案内盤 |
| イベント | 実際に起きた出来事 | 押された、入った、出たという合図 |
| リスナ | イベントを受け取る処理担当 | 合図を受け取る制御係 |
鬼滅の刃風に言えば、修行開始札が押されると、その合図が制御係に届き、制御係が表示を切り替えるようなものです。
ボタンを押す
↓
イベントが発生する
↓
リスナに通知される
↓
actionPerformedが呼ばれる
↓
表示が変わるこの流れを理解すると、GUIの「反応する仕組み」が見えてきます。
マウスイベントでより細かな反応を作れるようになった
ボタンを押すだけでなく、マウスの動きにも反応できるようになりました。
MouseListenerを使うと、次のようなマウス操作を扱えます。
| メソッド | 呼ばれるタイミング | 鬼滅の刃風のイメージ |
|---|---|---|
| mouseClicked | クリックしたとき | 修行札を押して離した |
| mousePressed | 押したとき | 修行盤に手を押し込んだ |
| mouseReleased | 離したとき | 押していた手を離した |
| mouseEntered | 部品の上に入ったとき | 手が修行札に近づいた |
| mouseExited | 部品の外へ出たとき | 手が修行札から離れた |
たとえば、マウスがボタンに入ったら表示を変え、外に出たら元に戻す処理が作れました。
public void mouseEntered(MouseEvent e)
{
bt.setLabel("修行メニューを選んでください");
}
public void mouseExited(MouseEvent e)
{
bt.setLabel("修行場へようこそ");
}このように、クリックしなくてもマウスが近づくだけで画面が反応するようになります。
鬼滅の刃風に言えば、隊士が修行案内札に手を近づけると、札が青白く光って案内文が変わるような仕組みです。
イベント処理を簡潔に書く工夫も学んだ
イベント処理は便利ですが、そのまま書くとコードが長くなりやすいことがあります。
特にMouseListenerのように、複数のメソッドを持つインターフェイスでは、使わないメソッドも書く必要がありました。
そこで学んだのが、MouseAdapter、無名クラス、ラムダ式などの書き方です。
| 書き方 | 特徴 | 鬼滅の刃風のイメージ |
|---|---|---|
| 通常の内部クラス | 仕組みが分かりやすい | 専任の制御係を置く |
| Adapterクラス | 必要なメソッドだけ書ける | 必要な反応だけ担当する補助係 |
| 無名クラス | 登録場所の近くに処理を書ける | その場限りの臨時制御係 |
| ラムダ式 | 短い処理を簡潔に書ける | 短い指令札を直接書く |
たとえば、ActionListenerのように抽象メソッドが1つだけのインターフェイスでは、ラムダ式を使って短く書けます。
bt.addActionListener(e -> bt.setLabel("気を高めています"));この書き方は、ボタンが押されたときの処理をすっきり書ける点が特徴です。
ただし、MouseListenerのように複数の抽象メソッドを持つものは、そのままラムダ式では書けません。
その場合は、MouseAdapterや無名クラスを使うと整理しやすくなります。
描画とイベント処理を組み合わせる考え方が見えてきた
16章では、画面に文字や図形や画像を描く処理も学びました。
描画の中心になるのが、paintとGraphicsです。
| 要素 | 役割 | 鬼滅の刃風のイメージ |
|---|---|---|
| paint | 実際に画面へ描く場所 | 修行案内盤に内容を書く係 |
| Graphics | 描画するための道具 | 文字や印を描く万能筆 |
| drawString | 文字を描く | 案内文を書く |
| drawImage | 画像を描く | 修行カードを表示する |
| fillOval | 塗りつぶした楕円を描く | 気のしるしを刻む |
| setColor | 色を指定する | 墨や光の色を変える |
| setFont | 文字の見た目を変える | 見出し札を大きくする |
画像を読み込んで表示する場面では、Image、Toolkit、getImageも使いました。
Toolkit tk = getToolkit();
im = tk.getImage("training.jpg");そして、paintの中でdrawImageを使って描画しました。
g.drawImage(im, 115, 80, this);ここで大切だったのは、画像を読み込むことと、画像を画面に描くことは別の処理だという点です。
| 処理 | 役割 |
|---|---|
| getImage | 画像を読み込んで準備する |
| Image | 読み込んだ画像を保持する |
| drawImage | 画像を画面に描く |
鬼滅の刃風に言えば、getImageは修行カードを巻物棚から取り出す処理です。
drawImageは、そのカードを修行案内盤に貼り出す処理です。
repaintで画面を描き直す流れを学んだ
16章では、イベント処理と描画処理をつなぐ重要な存在として、repaintも学びました。
たとえば、マウスで画面を押した場所に丸を描くプログラムでは、MouseEventから座標を取得しました。
x = e.getX();
y = e.getY();
repaint();ここで、xとyを変えただけでは画面の見た目はすぐに変わるとは限りません。
そこでrepaintを呼び、Javaに「画面を描き直してください」と依頼します。
| 処理 | 役割 |
|---|---|
| e.getX | 押した場所の横座標を取得する |
| e.getY | 押した場所の縦座標を取得する |
| x、yに保存 | 描画位置を記録する |
| repaint | 再描画を依頼する |
| paint | 最新のx、yを使って描く |
| fillOval | 指定位置に丸を描く |
鬼滅の刃風に言えば、水月が修行案内盤を押すと、その場所の座標が記録されます。
ただし、記録しただけでは案内盤の表示は変わりません。
支援隊士が「描き直してください」と伝令を出す必要があります。
その伝令がrepaintです。
そしてpaintが呼ばれ、最新の座標に気のしるしが描かれます。
図:16章中盤 イベント処理と描画がつながる
↓クリックすると拡大表示されます。

この図が示していること
この図は、16章中盤で学んだイベント処理と描画処理のつながりを表しています。
ユーザーがボタンを押したり、マウスで画面を押したりすると、イベントが発生します。
そのイベントは、登録されたリスナに通知されます。
リスナは必要な処理を行い、画面を更新したいときにrepaintを呼びます。
そしてpaintが呼ばれ、Graphicsを使って文字、画像、図形などを描き直します。
| 図の要素 | 意味 |
|---|---|
| イベント処理 | ユーザー操作を受け取る仕組み |
| リスナ | イベントを受け取る処理担当 |
| repaint | 再描画を依頼する橋渡し |
| paint | 実際に画面を描く場所 |
| Graphics | 文字、図形、画像を描く道具 |
この図から分かることは、GUIアプリでは「操作を受け取る処理」と「画面に描く処理」が分かれており、repaintがその間をつないでいるということです。
スレッドによって時間の流れを持つ画面が作れるようになった
16章の後半では、スレッドを使ったアニメーションも学びました。
それまでのGUI画面は、ボタンを押したら変わる、マウスを動かしたら変わる、というように、ユーザー操作をきっかけに変化するものが中心でした。
そこにスレッドを使うと、時間の経過に合わせて画面を変化させることができます。
たとえば、修行段階を1秒ごとに変えるプログラムでは、Runnable、Thread、run、sleep、repaint、paintを組み合わせました。
public class Sample7 extends Frame implements Runnableこのように、Frameを継承しながらRunnableを実装することで、ウィンドウとして動きながら、スレッドで実行する処理も持てるようになりました。
スレッドによるアニメーションの基本の流れは、次の通りです。
| 流れ | 内容 |
|---|---|
| 1 | Threadを作る |
| 2 | startでスレッドを開始する |
| 3 | runが動く |
| 4 | 表示する値を更新する |
| 5 | repaintで再描画を依頼する |
| 6 | Thread.sleepで少し待つ |
| 7 | この流れを繰り返す |
鬼滅の刃風にたとえると、修行表示盤に時間管理係がついたようなものです。
その係が一定時間ごとに修行段階を進めます。
そして、表示盤へ描き直しの合図を送り、少し待ってから次の段階へ進みます。
スレッドと描画の役割分担
スレッドを使ったアニメーションでは、runとpaintの役割を分けて考えることが大切でした。
| メソッド | 役割 |
|---|---|
| run | 時間に沿って値を変え、repaintを呼ぶ |
| paint | 現在の値を使って画面を描く |
| Thread.sleep | 次の更新まで待つ |
| repaint | paintを呼ぶきっかけを作る |
たとえば、runの中では、stepの値を更新します。
step = i;
repaint();
Thread.sleep(1000);一方、paintの中では、その時点のstepを使って文字を描きます。
g.drawString("修行段階 " + step + " に到達", 90, 150);この役割分担を鬼滅の刃風に置き換えると、次のようになります。
| Javaの要素 | 鬼滅の刃風のイメージ |
|---|---|
| Thread | 修行の時間管理係 |
| run | 段階更新の任務内容 |
| step | 現在の修行段階 |
| repaint | 表示盤への描き直し命令 |
| paint | 表示盤に文字を書く係 |
| sleep | 次の段階までの一呼吸 |
アニメーションは、単に文字を変えるだけでは成立しません。
値を変える。
描き直す。
少し待つ。
それを繰り返す。
この流れがあるから、画面が時間とともに変化して見えるようになります。
16章で見えてきたオブジェクト指向の実感
16章はGUIが中心でしたが、その中にはオブジェクト指向の考え方もたくさん登場しました。
ウィンドウも、ボタンも、ラベルも、画像も、イベントを処理するリスナも、すべてオブジェクトとして扱いました。
| オブジェクト指向の見方 | Javaでの例 | 鬼滅の刃風のたとえ |
|---|---|---|
| クラス | Frame、Button、Label | 修行装置や札の設計図 |
| オブジェクト | new Button、new Label | 実際に置かれた開始札や案内札 |
| 継承 | extends Frame | 基本の案内盤を受け継ぐ |
| インターフェイス | implements Runnable、ActionListener | 守るべき役割の約束 |
| メソッド | paint、run、actionPerformed | 描く、進める、反応する動作 |
| フィールド | Button bt、int step | 部品や状態を保存する場所 |
鬼滅の刃風に言えば、修行場を構成するものがそれぞれ役割を持っています。
Frameは修行場そのもの。
Buttonは修行開始札。
Labelは案内表示板。
Listenerは合図を受け取る制御係。
Threadは時間を進める進行係。
Graphicsは表示盤に描く筆。
それぞれのオブジェクトが役割を持ち、組み合わさることでGUIアプリが動きます。
つまり、オブジェクト指向は難しい理屈だけではありません。
役割ごとに部品を分け、それらを協力させてアプリを作る考え方です。
16章は、その実感を得やすい章でした。
Javaの応用分野へつながる入口も見えてきた
16章では、GUIやイベント処理だけでなく、その先の応用分野も見えてきました。
Javaで画面を作り、操作に反応し、描画し、時間に合わせて動かすことができるようになると、実際のアプリ開発のイメージが広がります。
| 16章で学んだこと | つながる先 |
|---|---|
| ウィンドウ作成 | デスクトップアプリの画面 |
| コンポーネント | ユーザーインターフェース |
| イベント処理 | ボタン、クリック、タップへの反応 |
| 描画 | 視覚的なアプリ表現 |
| 画像表示 | アイコン、カード、画面素材の表示 |
| repaint | 操作に応じた画面更新 |
| スレッド | アニメーション、時間管理、並行処理 |
| オブジェクト指向 | 大きなシステムの整理 |
鬼滅の刃風に言えば、修行場で覚えた技が、その場だけで終わらず、実戦任務や本部システム開発へ広がっていく状態です。
携帯任務札のようなスマートフォンアプリ。
本部中央管理装置のようなWebシステム。
作戦案内盤のようなデスクトップアプリ。
任務記録を扱う業務ツール。
Javaの基礎は、こうした分野へ進むための土台になります。
図:16章後半 学んだ内容が応用分野へつながる
↓クリックすると拡大表示されます。

この図が示していること
この図は、16章で学んだ内容が1つの流れとしてつながっていることを表しています。
最初はFrameでウィンドウを作りました。
次に、LabelやButtonなどのコンポーネントを置きました。
さらに、イベント処理でユーザー操作に反応できるようになりました。
その後、Graphicsで文字や図形や画像を描き、repaintで画面を更新しました。
最後に、Threadを使って時間とともに画面を動かす考え方を学びました。
| 学習内容 | できるようになったこと |
|---|---|
| ウィンドウ | 画面を持つアプリを作る |
| コンポーネント | 部品を配置して画面を構成する |
| イベント処理 | ユーザー操作に反応する |
| 描画 | 文字、図形、画像を表示する |
| スレッド | 時間に合わせて画面を変化させる |
| 応用分野 | 実際のアプリやWeb開発へつなげる |
この図から分かることは、16章の内容がバラバラの知識ではなく、GUIアプリケーションを中心にきれいにつながっているということです。
16章を学んだあとに持っておきたい感覚
16章を終えた段階で大切なのは、「Javaで画面を持つアプリケーションが作れるようになってきた」という実感です。
もちろん、まだ本格的な実務アプリを自由自在に作るには、さらに多くの学習が必要です。
しかし、16章まで学ぶと、次のようなことが見えてきます。
| できるようになったこと | 意味 |
|---|---|
| ウィンドウを表示できる | アプリ画面の土台を作れる |
| 部品を配置できる | 画面に意味を持たせられる |
| 操作に反応できる | ユーザーが使えるアプリに近づく |
| 文字や図形を描ける | 視覚的な表現ができる |
| 画像を表示できる | 画面の分かりやすさを高められる |
| クリック位置を扱える | 操作に応じた描画ができる |
| スレッドで動かせる | 時間の流れを持つ画面を作れる |
鬼滅の刃風に言えば、基礎の型を覚えた隊士が、ついに本部の修行装置を自分で扱えるようになってきた段階です。
案内盤を作る。
操作札を置く。
隊士の操作に反応させる。
気のしるしを描く。
修行段階を時間で進める。
こうした動きを作れるようになったことは、とても大きな前進です。
これから先へ進むための見方
16章を学んだあとは、目の前のコードだけでなく、その知識がどこへつながるのかを意識すると理解が深まりやすくなります。
| 今回の学び | 先につながる見方 |
|---|---|
| ウィンドウ作成 | アプリの画面設計 |
| コンポーネント | ユーザーインターフェース作り |
| イベント処理 | 使いやすい操作性 |
| MouseEvent | マウス操作や座標処理 |
| Graphics | 視覚的な表現 |
| repaint | 状態変化に応じた画面更新 |
| Thread | 動きや待ち時間のある処理 |
| Runnable | スレッドで動かす処理の整理 |
| 応用分野の理解 | 実際の開発現場への意識 |
この見方を持つと、16章はJava学習の終わりではなく、実践的な開発へ向かう入口として見えてきます。
鬼滅の刃風に言えば、修行場で覚えた型を、任務装置、携帯任務札、本部中央管理装置、作戦案内盤の開発へ広げていく段階です。
Javaの学習は、ひとつの命令を覚えるだけではありません。
学んだ命令や仕組みを組み合わせて、画面を作り、操作に反応させ、描画し、動かし、実際のアプリへつなげていくことが大切です。
16章は、その流れを体験できる重要な章でした。
