モジュール 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
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    サブクラスが呼び出すためのコンストラクタ。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    ルック・アンド・フィールのデフォルトを返します。
    abstract String
    このルック・アンド・フィールの実装に関する1行の説明を返します。
    static Object
    getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
    Toolkit.getDefaultToolkit().getDesktopProperty()を呼び出すことで、指定されたシステム・デスクトップ・プロパティの値を返します。
    getDisabledIcon(JComponent component, Icon icon)
    無効な状態のIconを返します。
    無効で、かつ選択されているコンポーネントによって使用されるIconを返します。
    abstract String
    このルック・アンド・フィールを識別する文字列を返します。
    このルック・アンド・フィールのLayoutStyleを返します。
    abstract String
    このルック・アンド・フィールを識別する短い文字列を返します。
    boolean
    RootPaneUIインスタンスを返すLookAndFeelJRootPaneでのWindow装飾の提供をサポートする場合は、trueを返します。
    void
    ルック・アンド・フィールを初期化します。
    static void
    installBorder(JComponent c, String defaultBorderName)
    コンポーネントのボーダーのプロパティにデフォルト値を設定する簡易メソッドです。
    static void
    installColors(JComponent c, String defaultBgName, String defaultFgName)
    コンポーネントのフォアグラウンド・カラーおよびバックグラウンド・カラーのプロパティにデフォルト値を設定する簡易メソッドです。
    static void
    installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
    コンポーネントのフォアグラウンド、バックグラウンド、およびフォントのプロパティにデフォルト値を設定する簡易メソッドです。
    static void
    installProperty(JComponent c, String propertyName, Object propertyValue)
    開発者がまだプロパティを設定していない場合に、指定された名前と値でプロパティをコンポーネントにインストールする簡易メソッドです。
    abstract boolean
    基本のプラットフォームに「ネイティブな」ルック・アンド・フィールがあり、現在のルック・アンド・フィールがその実装である場合にtrueを返します。
    abstract boolean
    基本のプラットフォームがこのルック・アンド・フィールをサポートする場合、または許可する場合にtrueを返します。
    static void
    loadKeyBindings(InputMap retMap, Object[] keys)
    指定されたバインディングでInputMapを生成します。
    keysからComponentInputMapUIResourceを作成します。
    static Object
    makeIcon(Class<?> baseClass, String gifFile)
    イメージをロードするUIDefault.LazyValueを作成して返します。
    static InputMap
    keysからInputMapUIResourceを作成します。
    makeKeyBindings(Object[] keyBindingList)
    KeyBindingsの配列を構築する簡易メソッドです。
    void
    ユーザーが、フォーカスを持つ編集不可能なJTextFieldへのペーストなどの無効な操作を行おうとしたときに呼び出されます。
    このオブジェクトのプロパティを表示および識別する文字列を返します。
    void
    ルック・アンド・フィールの初期化を解除します。
    static void
    ボーダーをアンインストールする簡易メソッドです。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • LookAndFeel

      protected LookAndFeel()
      サブクラスが呼び出すためのコンストラクタ。
  • メソッドの詳細

    • installColors

      public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
      コンポーネントのフォアグラウンド・カラーおよびバックグラウンド・カラーのプロパティにデフォルト値を設定する簡易メソッドです。 プロパティが設定されるのは、現在の値がnullまたはUIResourceの場合だけです。
      パラメータ:
      c - 色を設定するコンポーネント
      defaultBgName - バックグラウンドのキー
      defaultFgName - フォアグラウンドのキー
      例外:
      NullPointerException - 「例外」に記載されているとおり
      関連項目:
    • installColorsAndFont

      public static void installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
      コンポーネントのフォアグラウンド、バックグラウンド、およびフォントのプロパティにデフォルト値を設定する簡易メソッドです。 プロパティが設定されるのは、現在の値がnullまたはUIResourceの場合だけです。
      パラメータ:
      c - 色とフォントを設定するコンポーネント
      defaultBgName - バックグラウンドのキー
      defaultFgName - フォアグラウンドのキー
      defaultFontName - フォントのキー
      例外:
      NullPointerException - 「例外」に記載されているとおり
      関連項目:
    • installBorder

      public static void installBorder(JComponent c, String defaultBorderName)
      コンポーネントのボーダーのプロパティにデフォルト値を設定する簡易メソッドです。 ボーダーが設定されるのは、ボーダーがnullであるか、UIResourceのインスタンスである場合だけです。
      パラメータ:
      c - ボーダーを設定するコンポーネント
      defaultBorderName - ボーダーを指定するキー
      例外:
      NullPointerException - 「例外」に記載されているとおり
    • uninstallBorder

      public static void uninstallBorder(JComponent c)
      ボーダーをアンインストールする簡易メソッドです。 コンポーネントのボーダーがUIResourceである場合、 nullに設定されます。
      パラメータ:
      c - ボーダーをアンインストールするコンポーネント
      例外:
      NullPointerException - cnullである場合
    • installProperty

      public static void installProperty(JComponent c, String propertyName, Object propertyValue)
      開発者がまだプロパティを設定していない場合に、指定された名前と値でプロパティをコンポーネントにインストールする簡易メソッドです。 このメソッドは、プリミティブ型(boolean、intなど)のプロパティのデフォルト値を指定する必要があるが、クライアントによって設定された値はオーバーライドしないUI委譲のインスタンスによって使用されます。 プリミティブ型のプロパティ値はUIResourceマーカーでラップできないため、このメソッドは非公開状態を使用してプロパティがクライアントによって設定されているかどうかを判断します。
      パラメータ:
      c - プロパティの設定対象のコンポーネント
      propertyName - 設定するプロパティの名前
      propertyValue - プロパティの値
      例外:
      IllegalArgumentException - 指定されたプロパティがこのメソッドを使用して設定できるものでない場合
      ClassCastException - 開発者がプロパティ値を設定しておらず、型がプロパティの型と一致しない場合
      NullPointerException - cnullであるか、開発者が名前付きプロパティを設定しておらず、propertyValuenullである場合
      導入されたバージョン:
      1.5
    • makeKeyBindings

      public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
      KeyBindingsの配列を構築する簡易メソッドです。 このメソッドは非推奨ではありませんが、開発者がキー・バインディングを指定するときは、このメソッドではなく、ActionMapInputMapを使用するようにしてください。

      このメソッドは、keyBindingListの交互になるkey-actionのペアごとの、KeyBindingsの配列を返します。 keyは、KeyStroke.getKeyStrokeメソッドで指定された形式のString、またはKeyStrokeです。 キーとアクションのペアのaction部分は、 Actionの名前に対応するStringになっています。

      次に、6組の交互になるkey-actionのペアから1つのKeyBinding配列を作成する例を示します。

        JTextComponent.KeyBinding[] multilineBindings = makeKeyBindings( new Object[] {
                "UP", DefaultEditorKit.upAction,
              "DOWN", DefaultEditorKit.downAction,
           "PAGE_UP", DefaultEditorKit.pageUpAction,
         "PAGE_DOWN", DefaultEditorKit.pageDownAction,
             "ENTER", DefaultEditorKit.insertBreakAction,
               "TAB", DefaultEditorKit.insertTabAction
        });
       
      keyBindingList'sの長さが奇数の場合、最後の要素は無視されます。

      key-actionのペアのkey部分またはaction部分にnull値を指定すると、対応する値nullを持つKeyBindingが作成されます。 Swingのその他の部分では、KeyBindingを構成する値としてnon-nullが求められるので、key-actionのペアのkey部分にもaction部分にも、nullを指定しないようにしてください。

      パラメータ:
      keyBindingList - key-actionのペアの配列
      戻り値:
      KeyBindingsの配列
      例外:
      NullPointerException - keyBindingListnullである場合
      ClassCastException - ペアのkey部分がKeyStrokeでもStringでもない場合、またはペアのaction部分がStringでない場合
      関連項目:
    • makeInputMap

      public static InputMap makeInputMap(Object[] keys)
      keysからInputMapUIResourceを作成します。 これは、新しいInputMapUIResourceを作成し、loadKeyBindings(map, keys)を呼び出して、InputMapUIResourceを返す簡易メソッドです。
      パラメータ:
      keys - 交互になるkeystroke-action keyのペア(loadKeyBindings(javax.swing.InputMap, java.lang.Object[])で説明)
      戻り値:
      新しく作成されたInputMapUIResource
      導入されたバージョン:
      1.3
      関連項目:
    • makeComponentInputMap

      public static ComponentInputMap makeComponentInputMap(JComponent c, Object[] keys)
      keysからComponentInputMapUIResourceを作成します。 これは、新しいComponentInputMapUIResourceを作成し、 loadKeyBindings(map, keys)を呼び出し、 ComponentInputMapUIResourceを戻すための便利なメソッドです。
      パラメータ:
      c - ComponentInputMapUIResourceの作成に使用するコンポーネント
      keys - 交互になるkeystroke-action keyのペア(loadKeyBindings(javax.swing.InputMap, java.lang.Object[])で説明)
      戻り値:
      新しく作成されたInputMapUIResource
      例外:
      IllegalArgumentException - cnullである場合
      導入されたバージョン:
      1.3
      関連項目:
    • loadKeyBindings

      public static void loadKeyBindings(InputMap retMap, Object[] keys)
      指定されたバインディングでInputMapを生成します。 バインディングは、交互になるkeystroke-action keyのペアのリストとして指定されます。 keystrokeは、KeyStrokeのインスタンスか、バインディングのKeyStrokeを示すStringになります。 特定の形式については、KeyStroke.getKeyStroke(String)を参照してください。 ペアのaction key部分は、KeyStrokeInputMap内の登録済みのキーになっています。

      次に、2組のkey-actionのペアを使って、InputMapをロードする例を示します。

         LookAndFeel.loadKeyBindings(inputMap, new Object[] {
           "control X", "cut",
           "control V", "paste"
         });
       

      バインディング(keys)のリストとしてnullを指定した場合、retMapは変更されません。

      action keyとしてnullを指定した場合、InputMapからkeystroke'sのエントリが削除されます。 keystroke nullは無視されます。

      パラメータ:
      retMap - key-actionのペアを追加するInputMap
      keys - retMapに追加するバインディング
      例外:
      NullPointerException - keysnon-nullで、空でなく、かつretMapnullである場合
      導入されたバージョン:
      1.3
      関連項目:
    • makeIcon

      public static Object makeIcon(Class<?> baseClass, String gifFile)
      イメージをロードするUIDefault.LazyValueを作成して返します。 戻り値は、 UIDefaults.LazyValueの実装になります。 返されたオブジェクト上でcreateValueが呼び出されると、イメージがロードされます。 non-nullのイメージは、 UIResourceを実装するIconにラップされます。 イメージのロードは、 Class.getResourceAsStream(gifFile)を使って行われます。

      このメソッドは、引数のチェックを行いません。 non-nullの値を指定することを強くお薦めします。そうしないと、返されたオブジェクト上でcreateValueを呼び出したとき、例外が発生する可能性があります。

      パラメータ:
      baseClass - リソースのロードに使用するClass
      gifFile - イメージをロードするパス
      戻り値:
      UIDefaults.LazyValue。解決時に、LazyValueは指定されたイメージをロードする
      関連項目:
    • getLayoutStyle

      public LayoutStyle getLayoutStyle()
      このルック・アンド・フィールのLayoutStyleを返します。 戻り値はnull以外です。

      通常、ルック・アンド・フィールのLayoutStyleは使用しません。代わりに、LayoutStyleメソッドgetInstanceを使用します。

      戻り値:
      このルック・アンド・フィールのLayoutStyle
      導入されたバージョン:
      1.6
      関連項目:
    • provideErrorFeedback

      public void provideErrorFeedback(Component component)
      ユーザーが、フォーカスを持つ編集不可能なJTextFieldへのペーストなどの無効な操作を行おうとしたときに呼び出されます。 デフォルトの実装では、ビープ音を鳴らします。 別の動作を行う場合は、デフォルトの実装をサブクラスによってオーバーライドし、別のフィード・バックを指定する必要があります。
      パラメータ:
      component - エラーが発生したComponentnullも指定できる(この場合、エラー条件はComponentと直接関連付けられない)
      導入されたバージョン:
      1.4
    • getDesktopPropertyValue

      public static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
      Toolkit.getDefaultToolkit().getDesktopProperty()を呼び出すことで、指定されたシステム・デスクトップ・プロパティの値を返します。 指定されたプロパティの値がnullの場合、fallbackValueが返されます。
      パラメータ:
      systemPropertyName - 照会するシステム・デスクトップ・プロパティの名前
      fallbackValue - システム値がnullの場合、値として戻るオブジェクト
      戻り値:
      デスクトップ・プロパティの現在の値
      導入されたバージョン:
      1.4
      関連項目:
    • getDisabledIcon

      public Icon getDisabledIcon(JComponent component, Icon icon)
      無効な状態のIconを返します。 このメソッドは、無効な状態のIconが指定されていない場合に、それを生成するために使用されます。 たとえば、JButtonを作成し、setIconによりIconのみを指定した場合このメソッドが呼び出され、無効な状態のIconが作成されます。 iconとしてnullが渡された場合、このメソッドはnullを返します。

      ルック・アンド・フィールによっては無効な状態のIconが描画されないことがあり、その場合、これは無視されます。

      パラメータ:
      component - Iconを表示するJComponentnullも可
      icon - 無効な状態のアイコンを生成するIcon
      戻り値:
      無効な状態のIcon。適切なIconを生成できない場合はnull
      導入されたバージョン:
      1.5
    • getDisabledSelectedIcon

      public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
      無効で、かつ選択されているコンポーネントによって使用されるIconを返します。 このメソッドは、無効で、かつ選択されている状態のコンポーネントに対して、この状態の特定のIconが設定されていない場合に、Iconを生成するために使用します。 たとえば、JButtonを作成し、setIconによりIconのみを指定した場合、このメソッドが呼び出され、無効でかつ選択されているIconが作成されます。 iconとしてnullが渡された場合、このメソッドはnullを返します。

      ルック・アンド・フィールによっては、無効で、かつ選択されている状態のIconが描画されないことがありますが、その場合、このメソッドは無視されます。

      パラメータ:
      component - Iconを表示するJComponentnullも可
      icon - 無効で、かつ選択されている状態のアイコンを生成するIcon
      戻り値:
      選択された無効な状態のアイコン。適切なIconを生成できない場合はnull
      導入されたバージョン:
      1.5
    • getName

      public abstract String getName()
      「CDE/Motif」など、このルック・アンド・フィールを識別する短い文字列を返します。 この文字列は、メニュー項目に適しています。 ルック・アンド・フィールは、それぞれ異なる名前を持っています。たとえば、数個のコンポーネントの描画方法を変更するMotifLookAndFeelのサブクラスは、「CDE/Motif My Way」などと呼ばれます。こうした名前は、ユーザーが名前のリストからL&Fを選択するときに便利です。
      戻り値:
      このルック・アンド・フィールを識別する短い識別子
    • getID

      public abstract String getID()
      このルック・アンド・フィールを識別する文字列を返します。 この文字列は、有名なルック・アンド・フィールの実装を認識するアプリケーション/サービスで使用されます。 現在、有名なものとしては「Motif」、「Windows」、「Mac」、「Metal」などです。 ルック・アンド・フィールに基本的な変更を加えない有名なスーパー・クラスから派生したLookAndFeelは、このメソッドをオーバーライドすべきではありません。
      戻り値:
      このルック・アンド・フィールを識別する識別子
    • getDescription

      public abstract String getDescription()
      「The CDE/Motif Look and Feel」など、このルック・アンド・フィールの実装に対する1行の説明を返します。 これはユーザー向けの文字列で、ウィンドウのタイトルやツールヒント・メッセージなどに使用されます。
      戻り値:
      このルック・アンド・フィールの短い説明
    • getSupportsWindowDecorations

      public boolean getSupportsWindowDecorations()
      RootPaneUIインスタンスを返すLookAndFeelJRootPaneでのWindow装飾の提供をサポートする場合は、trueを返します。

      デフォルトの実装はfalseを返します。Window装飾をサポートするサブクラスは、この実装をオーバーライドし、trueを返すようにします。

      戻り値:
      このルック・アンド・フィールによって作成されたRootPaneUIインスタンスがクライアント側の装飾をサポートする場合、true
      導入されたバージョン:
      1.4
      関連項目:
    • isNativeLookAndFeel

      public abstract boolean isNativeLookAndFeel()
      基本のプラットフォームに「ネイティブな」ルック・アンド・フィールがあり、現在のルック・アンド・フィールがその実装である場合にtrueを返します。 たとえば、基本のプラットフォームがCDEを実行するSolarisである場合、CDE/Motifのルック・アンド・フィールの実装が trueを返します。
      戻り値:
      このルック・アンド・フィールが基本のプラットフォームのルック・アンド・フィールを表す場合、true
    • isSupportedLookAndFeel

      public abstract boolean isSupportedLookAndFeel()
      基本のプラットフォームがこのルック・アンド・フィールをサポートする場合、または許可する場合にtrueを返します。 ルック・アンド・フィールが特殊なリソースや、現在のプラットフォームに対して定義されていない法的契約に依存する場合、このメソッドはfalseを返します。
      戻り値:
      これがサポートされているルック・アンド・フィールである場合、true
      関連項目:
    • initialize

      public void initialize()
      ルック・アンド・フィールを初期化します。 このメソッドはpublicメソッドですが、ルック・アンド・フィールが現在のルック・アンド・フィールとしてインストールされたときにのみ、UIManagerによって呼び出すようにしてください。 このメソッドは、UIManagergetDefaultsを呼び出す前に呼び出されます。 このメソッドは、ルック・アンド・フィールの初期化を実行するためのメソッドです。 staticイニシャライザではなくサブクラスが、必要とする1回かぎりの設定を実行する必要があります。ルック・アンド・フィールクラス・オブジェクトは、isSupportedLookAndFeel()falseを返すことを検出する目的のみでロードされる可能性があるためです。
      関連項目:
    • uninitialize

      public void uninitialize()
      ルック・アンド・フィールの初期化を解除します。 このメソッドはpublicメソッドですが、ルック・アンド・フィールがアンインストールされるときにUIManagerによって呼び出すようにしてください。 たとえば、UIManager.setLookAndFeelがルック・アンド・フィールの変更時にこのメソッドを呼び出します。

      サブクラスがここで一部のリソースを解放することを選択してもかまいません。

      関連項目:
    • getDefaults

      public UIDefaults getDefaults()
      ルック・アンド・フィールのデフォルトを返します。 このメソッドはpublicメソッドですが、ルック・アンド・フィールが現在のルック・アンド・フィールとして設定され、initializeが呼び出されたあとにのみ、UIManagerによって呼び出すようにしてください。
      戻り値:
      ルック・アンド・フィールのデフォルト
      関連項目:
    • toString

      public String toString()
      このオブジェクトのプロパティを表示および識別する文字列を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      このオブジェクトの文字列表現