モジュール java.desktop
パッケージ java.awt

クラスComponent

java.lang.Object
java.awt.Component
すべての実装されたインタフェース:
ImageObserver, MenuContainer, Serializable
直系の既知のサブクラス:
Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextComponent

public abstract class Component extends Object implements ImageObserver, MenuContainer, Serializable
コンポーネントは、画面上に表示でき、ユーザーと対話できる、グラフィカルな表現を持つオブジェクトです。 コンポーネントとしては、典型的なグラフィカル・ユーザー・インタフェースのボタン、チェックボックス、スクロール・バーなどがあります。

Componentクラスは、メニューに関連していないAbstract Window Toolkitコンポーネントの抽象スーパー・クラスです。 また、Componentクラスを直接拡張して軽量コンポーネントを生成することもできます。 軽量コンポーネントは、ネイティブなウィンドウに関連していないコンポーネントです。 これに対して、重量コンポーネントはネイティブなウィンドウに関連しています。 isLightweight()メソッドを使用して2種類のコンポーネントを区別できます。

軽量コンポーネントと重量コンポーネントを1つのコンポーネント階層に混在させることができます。 ただし、そのような混在させたコンポーネント階層が正しく機能するためには、階層全体が有効である必要があります。 コンポーネントの境界を変更したり、コンテナに対してコンポーネントの追加や削除を行ったりしたために階層が無効になったときは、階層内で無効になっているもっとも上位のコンテナに対してあとでContainer.validate()メソッドを呼び出すことにより、階層全体を検証する必要があります。

シリアライズ

オブジェクト保存時にはSerializableプロトコルに適合するAWTリスナーだけが保存されることに注意してください。 AWTオブジェクトが直列化可能なリスナーを持たない場合、writeObject時に処理対象外になります。 開発者側では通常と同じように、オブジェクト直列化の影響を考慮する必要があります。 たとえば次のような場合にはこの影響を考慮します。
    import java.awt.*;
    import java.awt.event.*;
    import java.io.Serializable;

    class MyApp implements ActionListener, Serializable
    {
        BigObjectThatShouldNotBeSerializedWithAButton bigOne;
        Button aButton = new Button();

        MyApp()
        {
            // Oops, now aButton has a listener with a reference
            // to bigOne!
            aButton.addActionListener(this);
        }

        public void actionPerformed(ActionEvent e)
        {
            System.out.println("Hello There");
        }
    }
 
この例では、aButtonをそれ自体で直列化すると、MyAppおよびそれが参照しているオブジェクトもすべて同様に直列化されます。 問題が発生するのはリスナーの設計によってではなく、偶然、直列化可能になっている場合です。 MyAppActionListenerのそれぞれが直列化可能かどうかの判断を独立して行うために、入れ子構造のクラスを使用できます。次にその例を挙げます。
    import java.awt.*;
    import java.awt.event.*;
    import java.io.Serializable;

    class MyApp implements java.io.Serializable
    {
         BigObjectThatShouldNotBeSerializedWithAButton bigOne;
         Button aButton = new Button();

         static class MyActionListener implements ActionListener
         {
             public void actionPerformed(ActionEvent e)
             {
                 System.out.println("Hello There");
             }
         }

         MyApp()
         {
             aButton.addActionListener(new MyActionListener());
         }
    }
 

ノート: 最も効率的なペイント・コードの記述方法など、AWTおよびSwingで使用されるペイント・メカニズムの詳細は、AWTとSwingでのペイントを参照してください。

フォーカス・サブシステムの詳細については、「The Java Tutorial」のセクション「How to Use the Focus Subsystem」、および「フォーカスの仕様」を参照してください。

関連項目: