Previous | Next | Trail Map | Creating a User Interface | GUI の構成ブロックであるコンポーネントを使用する


コンポーネントを使用するときの一般的なルール

このページでは、コンポーネントに共通する一般的な情報を記載し、コンポーネント をコンテナに追加する方法について説明する。 また、コンポーネントが Component クラスから継承する機能や、コンポーネントの ルックアンドフィール (見た目と使い心地) を変更する方法についても説明する。

コンテナにコンポーネントを追加する方法

このレッスンを読み進むうちに、コンポーネントをコンテナに追加するコードが出てくる。これは、Window を除き、スクリーン上にそれ自身を表示する Component はすべて、まず Container オブジェクトに追加しなければならないからである。 このような Container はそれ自身が Component であり、別の Container へ追加されることも多い。 Frame や Dialog のような Window は最上位のコンテナであり、コンテナへ追加されることのないコンポーネントはこれらだけである。

Container(in the API reference documentation) クラスは、コンポーネント追加 のためのメソッドを 3 つ定義している。引数 1 個の add()メソッド が 1 つと、引数 2 個の add() メソッドが 2 つである。 どれを使うかはそのコンテナが使用しているレイアウトマネージャによって異なる。 レイアウトマネージャについては後のレッスンで学習するので、ここでは、このレッスンのコード抜粋を理解するのに必要な内容だけを説明する。

引数 1 個の add() メソッドには、追加したいコンポーネントを指定するだけでよい。 引数 2 個の add() メソッドのうち 1 つには、コンポーネントを追加する場所を整数位置で指定する引数がある。整数の -1 は、コンテナのコンポーネントリストの最後にコンポーネントを追加するよう指示する (これは引数 1 個のメソッ ドと同じ働きをする)。add() の引数 2 個のこの書式はあまり使用されない。したがって、"引数 2 個の add() メソッド" という記述は、ほとんどの場合、次のパラグラフで説明するもう 1 つの引数 2 個のメソッドを指している。FlowLayout(in the Creating a User Interface trail)GridLayout(in the Creating a User Interface trail)GridBagLayout(in the Creating a User Interface trail) レイ アウトマネージャはすべて、このような add() メソッドに対応できる 。

もう 1 つの引数 2 個の add() メソッドの 2 番目の引数には、追加するコンポーネントを指定する。 最初の引数はレイアウトマネージャによって異なる文字列である。BorderLayout(in the Creating a User Interface trail) (Window サブクラスのデフォルトのレイアウトマネージャ) では、"North"、"South" 、"East"、"West"、"Center" のどれかを指定しなければならない。CardLayout(in the 
Creating a User Interface trail) では、追加したいコンポーネントを識別 する何らかの文字列を指定すればよい。

注: コンポーネントをコンテナに追加すると、そのコンポーネントはそれまでのコンテナ から (もしあれば) 削除される。 このため、1 つのコンポーネントを 2 つのコンテナでもつことはできない。これは、2 つのコンテナが同時に表示されることがあり得ない場合でも同様である。

Component クラスが提供するもの

メニューを除くすべてのコンポーネントは、Component(in the API reference documentation) クラスのサブクラスとして実装 される。 これらは Component から大量の機能を継承する。 今まで、Component クラスがあらゆる描画とイベント処理の基礎であることを学習してきたが、ここで、Component が提供する機能の詳細なリストを示す。

基本的な描画のサポート
Component は、Component がそれ自身をスクリーン上に描画できるようにするpaint()update()repaint() メソッド を提供する。詳細については、 描画(in the Creating a User Interface trail) を参 照する。
イベント処理
Component は汎用の handleEvent() メソッドと、特定のイベン トタイプを処理する action() などのメソッドグループを定義する。 また Component は、コンポーネントのキーボード制御を可能にする、キーボードフォーカスもサポートする。 詳細については、イベント処理(in the Creating a User Interface trail) を参 照する。
外観の制御: フォント
Component は現在のフォントを調べ、設定し、現在のフォントに関する情報を取り出すためのメソッドを提供する。 詳細については、 テキストを扱う(in the Creating a User Interface 
trail) を参照する。
外観の制御: カラー
Component は、前景色と背景色を調べるメソッドと、それらを設定するメソッドを提供する。これらは、setForeground(Color)getForeground()setBackground(Color)getBackground() である。 前景色とは、コンポーネントが実行するあらゆる特製の描画のほか、コンポーネント内のあらゆるテキストに適用されるカラーのことである。背景色とは、テキストやグラフィックスの後ろのカラーのことである。見やすさのために、背景色には前景色と のコントラストをもたせる方がよい。
イメージ処理
Component はイメージ表示の基本を提供する。 ほとんどの Component は、その外観がプラットフォーム仕様のコードで実装されているため、イメージを表示できないことに注意する。 しかし、Canvas とほとんどの Container ではイメージを表示することができる。 イメージの扱い方については、 イメージを使用する(in the Creating a User Interface 
trail) を参照する。
スクリーン上のサイズと位置の制御
コンポーネントのサイズと位置はすべて (Window のものを除く)、レイアウト マネージャの影響を受ける。 しかし、すべてのコンポーネントは、位置はともかく、少なくともサイズについては指定できるようになっている。 preferredSize()minimumSize() メソッドにより、コンポーネントは望みのサイズと 最小のサイズをレイアウトマネージャに伝えることができる。 Component は、(レイ アウトマネージャの監督下で) コンポーネントの現在のサイズと位置を調べ、設定する メソッドも用意している。

コンポーネントの外観と動作を変更する方法

ほとんどのコンポーネントの外観はプラットフォーム仕様である。 たとえば、Motif システムと Macintosh システムではボタンの外観は異なる。 [両方のスクリーンダンプを示すこと。]

ほとんどのコンポーネントでは、通常の方法で簡単に外観を変えることはできない。 コンポーネントのクラスとスーパークラスによって提供されている、外観に影響を与 えるメソッドや変数を活用すれば、フォントや背景色など若干の外観を変えることが可能である。しかし、たとえコンポーネントのクラスのサブクラスを作成しても、コンポーネントの外観をすっかり変えてしまうことはできない。ほとんどのコンポーネントでは、プラットフォーム仕様の実装が、コンポーネントの実行する描画を上書きしてしまうからである。コンポーネントの外観を変更するには、望みの外観を もち、しかもそのコンポーネントに対するユーザの期待どおりに動作する Canvas サブクラスを実装しなければならない。

コンポーネントの外観を大きく変えるのは簡単ではないが、コンポーネントの動作を変更することはできる。 たとえば、テキストフィールドにおいて数値だけが正しい場合、すべてのキーボードイベントを調べて無効なものをさえぎるように TextField サブクラスを実装しておくことが考えられる。 これが可能なのは、プラットフォームに依存しない Component は、プラットフォー ムに依存する実装より先に、生のイベントを調べるからである。 詳細については、イベント処理(in the Creating a User Interface trail) を参照する。


Previous | Next | Trail Map | Creating a User Interface | GUI の構成ブロックであるコンポーネントを使用する