WebTutorial

WebTutorial

Java チュートリアル パートII--1

Mark Reynolds
2001年3月14日 / 00:00
 

クラス、スレッド、アプレット

Java 言語には、 モダンなオブジェクト指向プログラミング言語に期待されるすべてがある。 標準コントロール構造体、合理的なオブジェクトモデル、 標準のアプリケーション作成ツールやアプレット作成ツールがあり、 Web ページ内で動くよう設計されたより小さなアプレットを作成する。

Java の力は、しかしながら主として言語それ自体にあるのではなく、 Java 言語に付随したライブラリ、つまり Java クラスの階層にある。

このチュートリアルのパートI(『Web Developer』に1996年春掲載)では、 Java 言語とシンプルなアプレット構築を扱った。 パートIIでは、 Advanced Windowing Toolkit あるいは AWT として知られる、 グラフィックに関係する Java クラスセットに焦点を当てようと思う。 イベント操作やマルチタスクに注目しつつ、アプレット構築も再び取り上げる。

解像度の低い画像をプログラミングするのは、 わずかの砂で一度に砂の城を作るようなものだ。 より高水準のツールキットだと、もっと速くユーザーインターフェイスを構築できるが、 コントロールしにくく、設計上一定の妥協が必要だったり制限があったりする。 非常に高水準の GUI ビルダーはとても強力かもしれないが、 レパートリー外のことを要求すると、 フラストレーションの原因になるかもしれない。 Java の AWT はどうだろう?

ウィンドウシステムのどれかで画像プログラムを書くツールキットを使ったことがあれば、いろいろな意味で、 Advanced Windowing Toolkit はとても親しみやすいものに思えるだろう。

設計の核心は同じだ。 使用できるコンポーネントひとそろい(ボタン、ラベル、スクロールバーなど)、 これらのコンポーネントの見た目の配列の仕方、 コンポーネントとアプリケーション プログラム自身間の通信に関わるメカニズムなど。

たとえば、Cancel ボタンをグラフィックの右下のコーナーに置いて、 ボタンを CancelAction() 機能と連結する場合、 AWT では、これらを達成する方法がいくつかある。 また、Java プログラマに全然違う高水準のツールを与える、 非常に強力なクラスとメソッドのセットもある。

AWT でのプログラミングには、4つの側面がある。 すなわち、レイアウトの確定、コンポーネントの実装、色やフォントなどの一般的なリソースの操作、イベントの扱い である。これらのどの側面もその他の側面と明確に定義された方法で影響しあっている。

AMT の強さのひとつは、プラットフォームに依存しない設計であることだ。 AWT コードが、UNIX マシンや、Windows 95、Macintosh でまったく同じように見えるとは言えないが、AWT の振る舞 いは同じであることが保証される。

多くのツールキットとは違い、AWT は設計ポリシーを本当に強制しない。 その代わり、通常よく見かける5つの標準レイアウトクラス、 BorderLayout、CardLayout、FlowLayout、GridLayout、 それにGridBagLayout クラスを提供する。 また、独自のレイアウトクラスを作成することもできるし、 公認のレイアウトを避け、コンポーネントを絶対座標(x、y)で配置することもできる。 たいていの AWT アプレットは、 最終的には まったく単純な FlowLayout、GridLayout、あるいは BorderLayoutを使う。

レイアウトクラスの背後にある思想を理解するには、 BorderLayout を使った単純な例から出発しよう。

BorderLayout では、コンポーネントは北(上)、南(下)、東(右)あるいは西(左)の位置に置かれるか、真ん中 に置かれる。 「ボーダー」レイアウトと呼ばれるのは、 追加されるコンポーネントは対応するボーダー(センターコンポーネントだけは例外で、真ん中の使われていないスペ ースに置かれる)に固定されるからだ。 図1は、 4つのボタンが1つずつ基本方位に置かれたボーダーレイアウトを作成するコードの一部だ。

このコードは最初、 new 演算子を使って BorderLayout クラスの新しいインスタンスを作成する。 それから、そのインスタンスを唯一の引数としてsetLayout メソッドを呼び出す。

このステートメントの目的は何か。 BorderLayout をアプレットのデフォルトレイアウトとして確立するためではないかと思う。 それが有効に作用するのは、 Java アプレットは実は Applet クラスのインスタンスであり、 Applet クラスは実は、 Panel というグラフィカル コンテナクラスのサブクラスだからである。 どのアプレットも Applet クラスを拡張するように、 Applet は Panel を拡張する。 SetLayout への呼び出しは、実はアプレットが属するパネルを操作することである。

次の4つのステートメントは、位置にちなんだ名前の4つのボタンを作成する。 各ボタンのテキストは、 すでに static と final キーワードとともに宣言されたインスタンス変数である、 NORTH、SOUTH、EAST、WESTからきている。

これは Java で定数を宣言する標準的なアプローチである。 Java には C++ のような const キーワードはない。 その代わり、インスタンス変数が変更されないことを表す final キーワードと、 このインスタンス変数がそのクラスのすべてのインスタンスで共有されることを意味する static キーワードを使う。

ボタン作成後、add メソッドを使ってレイアウトされる。 それから final コールがなされ、show メソッドで、 すべてのコンポーネントが描かれたかどうか確認する。

5つの各レイアウトクラスには、add メソッドの独自の独特なフォームがある。 BorderLayout の場合、2つの引数の追加を要求する。 1番目は配置される場所、2番目は追加されるコンポーネントである。 この例では、ボタンラベルは配置位置と同じであることに注意。 必ずしも同じであることは必須でなく、 ボタンは簡単に Moe、Larry、Curly、Shemp と名づけることもできるが、 add メソッドには、まさにそれが示すような基本方位のひとつを与えられないと、わかりにくいだろう。 たとえ「el_amador」が有効なボタンインスタンスであっても、 「Norte, el_amador」というのは追加できない。

[ 次はこちら ]

【関連記事】
Java チュートリアル パートI--6
Java チュートリアル パートI--7
Vivendi 傘下の Canal Plus が Sun と提携、AOL 関連株の変動も
NTTドコモ、「デジタル・ムーバP503i」の販売再開
Java チュートリアル パートI--5

New Topics

Special Ad

ゆりかごからロケットまで、すべての乗り物をエンジョイ
ゆりかごからロケットまで、すべての乗り物をエンジョイ えん乗り」は、ゆりかごからロケットまで、すべての乗り物をエンジョイする、ニュース、コラム、動画などをお届けします! てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites