public abstract class LookAndFeel extends Object
LookAndFeel
は、その名前が示す通り、Look & Feelをカプセル化します。Look & Feelのインストール時以外に、開発者が直接LookAndFeel
と情報をやりとりすることは、ほとんどありません。通常は、開発者がLook & Feelをカスタマイズする場合にのみ、このクラスに注意する必要があります。
Swingの構築基盤では、各JComponent
サブクラスが特定のComponentUI
サブクラスの実装を持っています。ComponentUI
は、通常、「UI」、「コンポーネントUI」、「Look & Feelの委譲」などと呼ばれます。ComponentUI
サブクラスは、コンポーネントの特定の機能のLook & Feelを提供します。たとえば、JTree
は、ComponentUI
サブクラスTreeUI
の実装を必要とします。特定のComponentUI
サブクラスの実装は、LookAndFeel
によって提供されます。各JComponent
サブクラスは、JComponent
メソッドgetUIClassID
を使用して、必要なComponentUI
サブクラスを識別します。
各LookAndFeel
実装は、getDefaults
から返される、UIDefaults
オブジェクト内に各Swing UIクラスIDの値を指定することにより、適切なComponentUI
サブクラスの実装を提供する必要があります。たとえば、BasicLookAndFeel
は、BasicTreeUI
をTreeUI
の具象実装として使用します。このために、BasicLookAndFeel
は、getDefaults
から返されるUIDefaults
内にキーと値のペア"TreeUI"-"javax.swing.plaf.basic.BasicTreeUI"
を指定します。ComponentUI
サブクラスの実装を取得する方法については、UIDefaults.getUI(JComponent)
を参照してください。
LookAndFeel
がインストールされるとき、UIManager
はすべてのUIクラスIDのエントリが存在するかどうかを確認しません。このため、現在のLook & Feelで特定のUIクラスIDの値が指定されておらず、JComponent
サブクラスのインスタンスが作成されている場合、ランダム例外が発生します。
UIManager
に記載されているとおり、各LookAndFeel
に、開発者やシステムのデフォルトによって階層化されたデフォルトのセットを提供する機会が与えられます。一部のSwingコンポーネントは、特定のデフォルトのセットを提供するためにLook & Feelを要求します。これらについては、特定のデフォルトを必要とする個々のクラスにドキュメント化されています。
ComponentUIs
は、ComponentUI
がLook & Feelを提供するJComponent
上に様々なプロパティを設定する必要があります。この処理は通常、ComponentUI
がJComponent
上にインストールされるときに行われます。プロパティの設定は、開発者がプロパティを設定していない場合にのみ行う必要があります。値が非プリミティブである場合は、現在の値がnull
であるか、UIResource
を実装している場合にのみ、JComponent
上でComponentUI
がプロパティを変更するようにしてください。現在の値がnull
であるか、UIResource
を実装している場合は、開発者がプロパティを設定していません。このため、UIで自由に変更できます。たとえば、BasicButtonUI.installDefaults
は、button.getFont()
の戻り値がnull
であるか、UIResource
を実装している場合にのみ、JButton
のフォントを変更します。一方、button.getFont()
の戻り値がnon-null
で、UIResource
を実装していない場合、BasicButtonUI.installDefaults
はJButton
のフォントを変更しません。
値がプリミティブである場合、たとえば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
をスローします。コンストラクタと説明 |
---|
LookAndFeel() |
修飾子と型 | メソッドと説明 |
---|---|
UIDefaults |
getDefaults()
Look & Feelのデフォルトを返します。
|
abstract String |
getDescription()
このLook & Feelの実装に関する1行の説明を返します。
|
static Object |
getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
Toolkit.getDefaultToolkit().getDesktopProperty() を呼び出すことで、指定されたシステム・デスクトップ・プロパティの値を返します。 |
Icon |
getDisabledIcon(JComponent component, Icon icon)
無効な状態の
Icon を返します。 |
Icon |
getDisabledSelectedIcon(JComponent component, Icon icon)
無効で、かつ選択されているコンポーネントによって使用される
Icon を返します。 |
abstract String |
getID()
このLook & Feelを識別する文字列を返します。
|
LayoutStyle |
getLayoutStyle()
このLook & Feelの
LayoutStyle を返します。 |
abstract String |
getName()
このLook & Feelを識別する短い文字列を返します。
|
boolean |
getSupportsWindowDecorations()
RootPaneUI インスタンスを返すLookAndFeel がJRootPane でのWindow 装飾の提供をサポートする場合は、true を返します。 |
void |
initialize()
Look & Feelを初期化します。
|
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 |
isNativeLookAndFeel()
基本のプラットフォームに「ネイティブな」Look & Feelがあり、現在のLook & Feelがその実装である場合に
true を返します。 |
abstract boolean |
isSupportedLookAndFeel()
基本のプラットフォームがこのLook & Feelをサポートする場合、または許可する場合に
true を返します。 |
static void |
loadKeyBindings(InputMap retMap, Object[] keys)
指定されたバインディングで
InputMap を生成します。 |
static ComponentInputMap |
makeComponentInputMap(JComponent c, Object[] keys)
keys からComponentInputMapUIResource を作成します。 |
static Object |
makeIcon(Class<?> baseClass, String gifFile)
イメージをロードする
UIDefault.LazyValue を作成して返します。 |
static InputMap |
makeInputMap(Object[] keys)
keys からInputMapUIResource を作成します。 |
static JTextComponent.KeyBinding[] |
makeKeyBindings(Object[] keyBindingList)
KeyBindings の配列を構築する簡易メソッドです。 |
void |
provideErrorFeedback(Component component)
ユーザーが、フォーカスを持つ編集不可能な
JTextField へのペーストなどの無効な操作を行おうとしたときに呼び出されます。 |
String |
toString()
このオブジェクトのプロパティを表示および識別する文字列を返します。
|
void |
uninitialize()
Look & Feelの初期化を解除します。
|
static void |
uninstallBorder(JComponent c)
ボーダーをアンインストールする簡易メソッドです。
|
public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
null
またはUIResource
の場合だけです。c
- 色を設定するコンポーネントdefaultBgName
- バックグラウンドのキーdefaultFgName
- フォアグラウンドのキーNullPointerException
- 「例外」に記載されているとおりinstallColorsAndFont(javax.swing.JComponent, java.lang.String, java.lang.String, java.lang.String)
, UIManager.getColor(java.lang.Object)
public static void installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
null
またはUIResource
の場合だけです。c
- 色とフォントを設定するコンポーネントdefaultBgName
- バックグラウンドのキーdefaultFgName
- フォアグラウンドのキーdefaultFontName
- フォントのキーNullPointerException
- 「例外」に記載されているとおりinstallColors(javax.swing.JComponent, java.lang.String, java.lang.String)
, UIManager.getColor(java.lang.Object)
, UIManager.getFont(java.lang.Object)
public static void installBorder(JComponent c, String defaultBorderName)
null
であるか、UIResource
のインスタンスである場合だけです。c
- ボーダーを設定するコンポーネントdefaultBorderName
- ボーダーを指定するキーNullPointerException
- 「例外」に記載されているとおりpublic static void uninstallBorder(JComponent c)
UIResource
である場合、null
に設定されます。c
- ボーダーをアンインストールするコンポーネントNullPointerException
- c
がnull
である場合public static void installProperty(JComponent c, String propertyName, Object propertyValue)
UIResource
マーカーでラップできないため、このメソッドは非公開状態を使用してプロパティがクライアントによって設定されているかどうかを判断します。c
- プロパティの設定対象のコンポーネントpropertyName
- 設定するプロパティの名前propertyValue
- プロパティの値IllegalArgumentException
- 指定されたプロパティがこのメソッドを使用して設定できるものでない場合ClassCastException
- 開発者がプロパティ値を設定しておらず、型がプロパティの型と一致しない場合NullPointerException
- c
がnull
であるか、開発者が名前付きプロパティを設定しておらず、propertyValue
がnull
である場合public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
KeyBindings
の配列を構築する簡易メソッドです。このメソッドは非推奨ではありませんが、開発者がキー・バインディングを指定するときは、このメソッドではなく、ActionMap
とInputMap
を使用するようにしてください。
このメソッドは、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
- keyBindingList
がnull
である場合ClassCastException
- ペアのkey
部分がKeyStroke
でもString
でもない場合、またはペアのaction
部分がString
でない場合ActionMap
, InputMap
, KeyStroke.getKeyStroke(char)
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
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
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
- c
がnull
である場合loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
, ComponentInputMapUIResource
public static void loadKeyBindings(InputMap retMap, Object[] keys)
InputMap
を生成します。バインディングは、交互になるkeystroke-action key
のペアのリストとして指定されます。keystroke
は、KeyStroke
のインスタンスか、バインディングのKeyStroke
を示すString
になります。特定の形式については、KeyStroke.getKeyStroke(String)
を参照してください。ペアのaction key
部分は、KeyStroke
のInputMap
内の登録済みのキーになっています。
次に、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
- keys
がnon-null
で、空でなく、かつretMap
がnull
である場合KeyStroke.getKeyStroke(String)
, InputMap
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
は指定されたイメージをロードするUIDefaults.LazyValue
, Icon
, Class.getResourceAsStream(String)
public LayoutStyle getLayoutStyle()
LayoutStyle
を返します。戻り値はnull
以外です。
通常、Look & FeelのLayoutStyle
は使用しません。代わりに、LayoutStyle
メソッドgetInstance
を使用します。
LayoutStyle
LayoutStyle.getInstance()
public void provideErrorFeedback(Component component)
JTextField
へのペーストなどの無効な操作を行おうとしたときに呼び出されます。デフォルトの実装では、ビープ音を鳴らします。別の動作を行う場合は、デフォルトの実装をサブクラスによってオーバーライドし、別のフィード・バックを指定する必要があります。component
- エラーが発生したComponent
。null
も指定できる(この場合、エラー条件はComponent
と直接関連付けられない)public static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
Toolkit.getDefaultToolkit().getDesktopProperty()
を呼び出すことで、指定されたシステム・デスクトップ・プロパティの値を返します。指定されたプロパティの値がnull
の場合、fallbackValue
が返されます。systemPropertyName
- 照会するシステム・デスクトップ・プロパティの名前fallbackValue
- システム値がnullの場合、値として戻るオブジェクトToolkit.getDesktopProperty(java.lang.String)
public Icon getDisabledIcon(JComponent component, Icon icon)
Icon
を返します。このメソッドは、無効な状態のIcon
が指定されていない場合に、それを生成するために使用されます。たとえば、JButton
を作成し、setIcon
によりIcon
のみを指定した場合このメソッドが呼び出され、無効な状態のIcon
が作成されます。icon
としてnull
が渡された場合、このメソッドはnull
を返します。
Look & Feelによっては無効な状態のIcon
が描画されないことがあり、その場合、これは無視されます。
component
- Icon
を表示するJComponent
。null
も可icon
- 無効な状態のアイコンを生成するIcon
Icon
。適切なIcon
を生成できない場合はnull
public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
Icon
を返します。このメソッドは、無効で、かつ選択されている状態のコンポーネントに対して、この状態の特定のIcon
が設定されていない場合に、Icon
を生成するために使用します。たとえば、JButton
を作成し、setIcon
によりIcon
のみを指定した場合、このメソッドが呼び出され、無効でかつ選択されているIcon
が作成されます。icon
としてnull
が渡された場合、このメソッドはnull
を返します。
Look & Feelによっては、無効で、かつ選択されている状態のIcon
が描画されないことがありますが、その場合、このメソッドは無視されます。
component
- Icon
を表示するJComponent
。null
も可icon
- 無効で、かつ選択されている状態のアイコンを生成するIcon
。Icon
を生成できない場合はnull
。public abstract String getName()
public abstract String getID()
public abstract String getDescription()
public boolean getSupportsWindowDecorations()
RootPaneUI
インスタンスを返すLookAndFeel
がJRootPane
でのWindow
装飾の提供をサポートする場合は、true
を返します。
デフォルトの実装はfalse
を返します。Window
装飾をサポートするサブクラスは、この実装をオーバーライドし、true
を返すようにします。
RootPaneUI
インスタンスがクライアント側の装飾をサポートする場合、true
JDialog.setDefaultLookAndFeelDecorated(boolean)
, JFrame.setDefaultLookAndFeelDecorated(boolean)
, JRootPane.setWindowDecorationStyle(int)
public abstract boolean isNativeLookAndFeel()
true
を返します。たとえば、基本のプラットフォームがCDEを実行するSolarisである場合、CDE/MotifのLook & Feelの実装がtrue
を返します。true
public abstract boolean isSupportedLookAndFeel()
true
を返します。Look & Feelが特殊なリソースや、現在のプラットフォームに対して定義されていない法的契約に依存する場合、このメソッドはfalse
を返します。true
UIManager.setLookAndFeel(javax.swing.LookAndFeel)
public void initialize()
UIManager
によって呼び出すようにしてください。このメソッドは、UIManager
がgetDefaults
を呼び出す前に呼び出されます。このメソッドは、Look & Feelの初期化を実行するためのメソッドです。staticイニシャライザではなくサブクラスが、必要とする1回かぎりの設定を実行する必要があります。Look & Feelクラス・オブジェクトは、isSupportedLookAndFeel()
がfalse
を返すことを検出する目的のみでロードされる可能性があるためです。public void uninitialize()
UIManager
によって呼び出すようにしてください。たとえば、UIManager.setLookAndFeel
がLook & Feelの変更時にこのメソッドを呼び出します。
サブクラスがここで一部のリソースを解放することを選択してもかまいません。
public UIDefaults getDefaults()
initialize
が呼び出されたあとにのみ、UIManager
によって呼び出すようにしてください。initialize()
, uninitialize()
, UIManager.setLookAndFeel(javax.swing.LookAndFeel)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.