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[])で説明)InputMapUIResourceloadKeyBindings(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[])で説明)InputMapUIResourceIllegalArgumentException - cがnullである場合loadKeyBindings(javax.swing.InputMap, java.lang.Object[]), ComponentInputMapUIResourcepublic 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のペアを追加するInputMapkeys - retMapに追加するバインディングNullPointerException - keysがnon-nullで、空でなく、かつretMapがnullである場合KeyStroke.getKeyStroke(String), InputMappublic static Object makeIcon(Class<?> baseClass, String gifFile)
UIDefault.LazyValueを作成して返します。戻り値は、UIDefaults.LazyValueの実装になります。返されたオブジェクト上でcreateValueが呼び出されると、イメージがロードされます。non-nullのイメージは、UIResourceを実装するIconにラップされます。イメージのロードは、Class.getResourceAsStream(gifFile)を使って行われます。
このメソッドは、引数のチェックを行いません。non-nullの値を指定することを強くお薦めします。そうしないと、返されたオブジェクト上でcreateValueを呼び出したとき、例外が発生する可能性があります。
baseClass - リソースのロードに使用するClassgifFile - イメージをロードするパスUIDefaults.LazyValue。解決時に、LazyValueは指定されたイメージをロードするUIDefaults.LazyValue, Icon, Class.getResourceAsStream(String)public LayoutStyle getLayoutStyle()
LayoutStyleを返します。戻り値はnull以外です。
通常、Look & FeelのLayoutStyleは使用しません。代わりに、LayoutStyleメソッドgetInstanceを使用します。
LayoutStyleLayoutStyle.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 - 無効な状態のアイコンを生成するIconIcon。適切なIconを生成できない場合はnullpublic 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インスタンスがクライアント側の装飾をサポートする場合、trueJDialog.setDefaultLookAndFeelDecorated(boolean), JFrame.setDefaultLookAndFeelDecorated(boolean), JRootPane.setWindowDecorationStyle(int)public abstract boolean isNativeLookAndFeel()
trueを返します。たとえば、基本のプラットフォームがCDEを実行するSolarisである場合、CDE/MotifのLook & Feelの実装がtrueを返します。truepublic abstract boolean isSupportedLookAndFeel()
trueを返します。Look & Feelが特殊なリソースや、現在のプラットフォームに対して定義されていない法的契約に依存する場合、このメソッドはfalseを返します。trueUIManager.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.