目次> 第4章> 4.1 TOPUPPREVNEXT

4.1 背景色の指定

押しボタンを押すと、ウィンドウの背景色が青になったり赤になったりするような プログラムを作成しましょう。

ソース・プログラム ColorButton.java

プログラムの構造
プログラム ColorButton.java

プログラムの解説

プログラムの実行結果

ボタンについてのさらに詳しい解説は、 Appendix A の java.swing.JButton を参照してください。 プログラムの構造が分かったら次節にすすみましょう。

12〜17行目と 18〜23行目のパターンが同じで何となく落ち着かない、 という方は次節に進む前に少し寄り道をしていきましょう。

寄り道1

今は「青」と「赤」だけだけれど、 3色になったらどうするのか(また、カット・アンド・ペーストで だらだらならべるのか)という問題です。

この部分を、 ColorSetButton というクラスにして、くくり出したのが プログラム ColorButton2.java です。
色を5色にしましたが、 プログラムの構造はこちらのほうがシンプルになっています。

ColorSetButton は、swing の JButton をもとに作ったボタンで、 「 ボタンを押したときに、ウィンドウの背景色を何に変更するか 指定できるボタン 」。
ここまで、機能アップしたボタンを用意しておけば、あとは貼るだけ! という感覚。

寄り道2

「 背景色を指定のできるボタンがついたフレーム 」を用意しておいて main メソッドでは表示するだけ、という考え方をすると
プログラム ColorFrame.java
のような構造になります。 実行結果は変わりません。

色については、Appendix C awt の java.awt.Color に簡単な解説があります。

このプログラムで新しく出てきたものがもう一つあります。 9行目の final です。 以下 final について解説します。

final は、「プログラムの中で値を変更しない」という意味です。 具体的には9行目で、frame のコンテント・ペインを取得して、 pane という名前を付けたが、この名前は以後変更しない と宣言しています。 代入という言い方をすれば、 変数 pane に初期値を代入した後はこの変数に代入をしない という宣言です。

pane は、15行目と21行目で参照されています。 この場所はアクションリスナの中ですから、ボタンが押された時に参照されます。
プログラムの実行は7行目から始まり、順に実行され、31行目でフレームを表示して終わります。 途中で13行目や18行目が実行され、アクションリスナがボタンに登録されますが、 アクションリスナの中身が実行されるのは、もっとずっと後の「ボタンが押されたとき」です。 この「ずっと後でpaneの値を参照する」ために final という宣言が必要になります。

final 宣言をしないで pane をアクションリスナ内で利用する方法は4.3節で解説します。


更新日:2006/05/19 TOPUPPREVNEXT