Deep Side of Java〜Java 言語再入門 第4回 〜 アプレット、スレッド、AWT

AWTの使い方

さまざまなWidget






AWTの使い方

さまざまなWidget

Java AWT では多くのWidgetが提供されている。これらは単に自分で作成するクラスの中で、Widgetとして作成して自分のメインウィンドウクラスの中に配置しても良いし、それらを継承したクラスを作成して使っても良い。各種Widgetには次のような継承関係がある。

Object --- Component --- Container --- Window --- Frame --- JFrame(Swing)
        |             |- Button     |          |- Dialog --- FileDialog
        |             |- Canvas     |- Panel
        |             |- Label      |
        |             |- List       |- JComponent --- 各種 Swing Widget
        |             |- Scrollbar                 |- Jpanel(Swing)
        |             |- Choice
        |             |- Checkbox
        |             |- TextComponent --- TextArea
        |                               |- TextField
        |- MenuComponent --- MenuBar
                          |- MenuItem --- Menu --- PopupMenu
                                       |- CheckboxMenuItem

可視的ではないウィジットクラスについて簡単に解説する。

Component
さまざまなWidgetに共通する仕様を定義した抽象基底クラスである。
Container
Widgetの中でも、自分の中に他のWidgetを「入れる」ことができる、いわゆる「Container クラス」用の抽象基底クラスである。
Window
Container クラスでも、トップレベルに来ることができる「ウィンドウ」を定義する。しかし、ほとんどの場合、これではなく具体的な Frame クラスや Dialog クラスを使う。
Frame
これが実際のスタンドアロンGUIプログラムで、メインクラスが継承すべきクラスである。つまり、GUIアプリケーションとしてのトップウィンドウであり、さまざまなWidgetを自分の内部に持つことが可能である。
Panel
レイアウトの都合でいくつかのWidgetをまとめるなど、単純にContainer クラスを使いたい場合には、この Panel クラスを使う。Widgetの「入れ物」として機能する。
Canvas
見た目の上では特にWidgetらしい内容は何もないが、画像表示や描画のためのキャンバスとして働く。

AWT では、実際のウィンドウオブジェクトはローカルなOSのWidgetを流用している。だから「ピア」と呼ばれるWidgetの本体はCなどの機械語プログラムであり、Widgetの「ちょっとした」カスタマイズができないことがある。たとえば、Button Widgetの表示を2行にすることさえ、AWTでは方法がない。そういう時に、Canvas Widgetがカスタムウィジットを作成するベースとして良く使われたりもする。

可視的なウィジットクラスをほぼすべて使ったプログラム例をお見せしよう。各Widgetの説明はそれぞれ入っているので、見ればお分かりのことと思う。基本的なGUIツールキットで見かけるWidgetは大概入っている。やや変わっているのは、同じ Checkbox クラスを使いながら、CheckboxGroup クラスと関係づけると「排他的選択(ラジオボタン)」になり、それをしないと「独立選択(いわゆるチェックボックス)」で動作し、しかも見かけも違うことであろう。

また白い背景になっているのは、その部分が独立した Panel クラスが使われていることを示すためである。

なおかつ、これらはオブジェクト指向言語で作られたWidgetであるために、いわゆる「GUIのプロパティ」の設定自体は、それぞれのウィジットクラスのそれぞれのメソッドによって設定され、変更されることに注意されたい。だから、個別の Widget インスタンスについて、それらを「部品」のように扱い、それぞれ独立にプロパティを装備させることが出来て、可読性が向上している。



copyright by K.Sugiura, 1996-2006