モジュール java.desktop
パッケージ javax.swing

クラスLookAndFeel

java.lang.Object
javax.swing.LookAndFeel
直系の既知のサブクラス:
BasicLookAndFeel, MultiLookAndFeel

public abstract class LookAndFeel extends Object
LookAndFeelは、その名前が示す通り、ルック・アンド・フィールをカプセル化します。 ルック・アンド・フィールのインストール時以外に、開発者が直接LookAndFeelと情報をやりとりすることは、ほとんどありません。 通常は、開発者がルック・アンド・フィールをカスタマイズする場合にのみ、このクラスに注意する必要があります。

Swingの構築基盤では、各JComponentサブクラスが特定のComponentUIサブクラスの実装を持っています。 ComponentUIは、通常、「UI」、「コンポーネントUI」、「ルック・アンド・フィールの委譲」などと呼ばれます。 ComponentUIサブクラスは、コンポーネントの特定の機能のルック・アンド・フィールを提供します。 たとえば、JTreeは、ComponentUIサブクラス TreeUIの実装を必要とします。 特定の ComponentUIサブクラスの実装は、LookAndFeelによって提供されます。 JComponentサブクラスは、JComponentメソッド getUIClassIDを使用して、必要なComponentUIサブクラスを識別します。

LookAndFeel実装は、getDefaultsから返される、 UIDefaultsオブジェクト内に各Swing UIクラスIDの値を指定することにより、適切なComponentUIサブクラスの実装を提供する必要があります。 たとえば、BasicLookAndFeelは、BasicTreeUITreeUIの具象実装として使用します。 このために、 BasicLookAndFeelは、getDefaultsから返されるUIDefaults内にキーと値のペア "TreeUI"-"javax.swing.plaf.basic.BasicTreeUI"を指定します。 ComponentUIサブクラスの実装を取得する方法については、UIDefaults.getUI(JComponent)を参照してください。

LookAndFeelがインストールされるとき、UIManagerはすべてのUIクラスIDのエントリが存在するかどうかを確認しません。 このため、現在のルック・アンド・フィールで特定のUIクラスIDの値が指定されておらず、JComponentサブクラスのインスタンスが作成されている場合、ランダム例外が発生します。

ルック・アンド・フィールの推奨事項

UIManagerに記載されているとおり、各LookAndFeelに、開発者やシステムのデフォルトによって階層化されたデフォルトのセットを提供する機会が与えられます。 一部のSwingコンポーネントは、特定のデフォルトのセットを提供するためにルック・アンド・フィールを要求します。 これらについては、特定のデフォルトを必要とする個々のクラスにドキュメント化されています。

ComponentUIとデフォルト

一般に、すべてのComponentUIsは、ComponentUIがルック・アンド・フィールを提供するJComponent上に様々なプロパティを設定する必要があります。 この処理は通常、 ComponentUIJComponent上にインストールされるときに行われます。 プロパティの設定は、開発者がプロパティを設定していない場合にのみ行う必要があります。 値が非プリミティブである場合は、現在の値がnullであるか、UIResourceを実装している場合にのみ、 JComponent上でComponentUIがプロパティを変更するようにしてください。 現在の値がnullであるか、UIResourceを実装している場合は、開発者がプロパティを設定していません。このため、UIで自由に変更できます。 たとえば、BasicButtonUI.installDefaultsは、 button.getFont()の戻り値がnullであるか、 UIResourceを実装している場合にのみ、JButtonのフォントを変更します。 一方、button.getFont()の戻り値がnon-nullで、UIResourceを実装していない場合、BasicButtonUI.installDefaultsJButtonのフォントを変更しません。

opaqueなどのプリミティブ値の場合、メソッド installPropertyを起動する必要があります。installPropertyは、開発者が値を変更していない場合にのみ、対応するプロパティを変更します。

ComponentUI実装は、推奨ガイドラインに従って必要なチェックを行い、プロパティをインストールするときに、このクラスが提供するさまざまなインストール・メソッドを使用します。

例外

変更されるプロパティの値がnullまたはUIResourceである場合、LookAndFeelが提供するすべてのインストール・メソッドは、デフォルト値にアクセスする必要があります。 たとえば、フォントのインストールでは、次の処理が行われます。
   JComponent c;
   Font font = c.getFont();
   if (font == null || (font instanceof UIResource)) {
       c.setFont(UIManager.getFont("fontKey"));
   }
 
フォントがnullまたはUIResourceである場合、fontKeyというキーにより、デフォルト・テーブルが照会されます。 UIDefault'sの取得メソッドはすべて、nullを渡された場合に NullPointerExceptionをスローします。 このため、特に記載がないかぎり、現在の値がnullまたはUIResourceで、デフォルト・キーとしてnullが指定された場合、 LookAndFeelの個々のインストール・メソッドはNullPointerExceptionをスローします。 また、特に指定がないかぎり、nullコンポーネントが渡された場合、これらすべてのinstallメソッドはNullPointerExceptionをスローします。
導入されたバージョン:
1.2