JDK 1.1 AWT の使用例に戻る
軽量コンポーネント
JDK 1.1 Beta 3 リリースから、AWT では軽量コンポーネントをサポートしています。次のような場合には、軽量コンポーネントが不可欠です。
- 四角形以外のカスタムコンポーネントを作成する場合
- 部分的 (または全体的) に透明なカスタムコンポーネントを作成する場合
- 使用する複数のコンポーネントを互いの領域内に描画可能にする場合
- プログラム内に多くのコンポーネントが含まれるため、重量コンポーネントで実装すると効率が悪くなる場合
このページでは、まず軽量コンポーネントの作り方について説明し、次に、軽量コンポーネントを使ったアプレットの例題のページにリンクします (ソースコードあり)。軽量コンポーネントの詳細と動作については、「Java AWT: Lightweight UI Framework」を参照してください。
軽量コンポーネントを作成するには、次のクラスのいずれかを直接継承するクラスを作成します。
-
Component
-
Container
- 軽量コンポーネントを実装したクラス (たとえば、
Component
または Container
のサブクラスである、AWT ではないクラス)
このクラスには、コンポーネントの外観と操作性 (Look & Feel) の両方を備える必要があります。通常は、次のメソッドを実装します。
- 1 つ以上のコンストラクタ。コンポーネントがイベントに応答する場合は、コンストラクタは
enableEvents
メソッドを呼び出す
- コンポーネントの外観を画面に表示するための、
paint
メソッド
- コンポーネントの状態をプログラムで変更するための、
setText
などのメソッド (必要な場合)。これらの各メソッドは、コンポーネントの内部状態を変更するだけでなく、コンポーネントの外観を変更する必要があるときには repaint
メソッドを呼び出す。コンポーネントのサイズを変更する場合には、invalidate
メソッドを呼び出してから repaint
メソッドを呼び出す
- リスナーをコンポーネントに登録したり登録を抹消したりするためのメソッド (必要な場合)。たとえば、ボタンには
addActionListener
メソッドと removeActionListener
メソッドを実装し、それぞれ AWTEventMulticaster
の add
メソッドと remove
メソッドを使って、指定されたリスナーを追加または削除する
- コンポーネントの描画可能領域全体の一部だけに対するイベントにコンポーネントが応答する場合は、
contains
メソッド
- 適切な
processXxx
メソッド。たとえば、ボタンには、ボタンの状態を変更し、必要に応じて actionPerformed
メッセージを作成するための processMouseEvent
を実装する
軽量コンポーネントでは、コンテナに次の特別な条件が要求されます。
- 軽量コンポーネントはコンテナでダブルバッファリングを行わないと、時に目に見えるほどのちらつきを起こす。ダブルバッファのコンテナの例は、ゲージの例を参照
- コンテナに実装されている
paint
メソッドが super.paint
を呼び出さない場合は、軽量コンポーネントは表示されない。したがって、描画を行うコンテナ (たとえば表示領域の周囲にボックスを描くなど) を実装する場合は、コンテナの paint
メソッドが必ず super.paint
を呼び出すように注意する
この項は、軽量コンポーネントの 4 つの例題のページにリンクしています。各ページには 1 つのアプレットがあり、そのアプレットのソースコードへリンクしています。JDK 1.1 Beta 3 をサポートしているブラウザでは、各ページのアプレットを実行できます。使用中のブラウザが 1.1 Beta 3 をサポートしていない場合は、JDK アプレットビューアなど別のツールを使ってアプレットを表示してください。
注: 次のページのアプレットを表示するには、HotJava などの JDK 1.1 用のブラウザ、または JDK アプレットビューアが必要です。アプレットがうまく表示できないときは、ここをクリックしてください。
軽量コンポーネントの例:
- 丸ボタンの例
- 軽量コンポーネントは簡単に作成できます。 その例を示します。
- Openlook ボタンの例
- 丸ボタンの例を修正し、よりリアルな外観の軽量コンポーネントを作成します。
- スピナーの例
- 軽量コンポーネントのアニメーションの例です。
- ゲージの例
- 軽量コンポーネントのアニメーションで、ちらつきをなくすためにダブルバッファリングを使う方法の例です。この例には、JDK 1.1 だけを使用したバージョンと Swing バージョンの両方のソースコードがあります。Swing の詳細については、Swing のリリースドキュメントを参照してください。
JDK 1.1 AWT の使用例に戻る