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

クラスUIManager

java.lang.Object
javax.swing.UIManager
すべての実装されたインタフェース:
Serializable

public class UIManager extends Object implements Serializable
UIManagerは、現在のルック・アンド・フィール、使用可能なルック・アンド・フィールのセット、ルック・アンド・フィールの変更時に通知を受けるPropertyChangeListeners、ルック・アンド・フィールのデフォルト値、およびさまざまなデフォルト値を取得するために使用する簡易メソッドを管理します。

ルック・アンド・フィールの指定

ルック・アンド・フィールの指定方法は2とおりあります。1つはルック・アンド・フィールのクラスの完全修飾名を指定する方法、もう1つはLookAndFeelのインスタンスを作成し、setLookAndFeelに渡す方法です。 次に、システムのルック・アンド・フィールにルック・アンド・フィールを設定する例を示します。
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 
次に、クラス名を指定してルック・アンド・フィールを設定する例を示します。
   UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
 
ルック・アンド・フィールを変更したら必ず、すべてのJComponents上でupdateUIを呼び出します。 SwingUtilities.updateComponentTreeUI(java.awt.Component)メソッドを使用すると、包含関係の階層に updateUIを簡単に適用できます。 詳細は、そちらを参照してください。 ルック・アンド・フィールの変更後、 updateUIを呼び出さなかった場合の正確な動作は指定されていません。 予期しない例外、ペイントの問題、またはそれ以上に困った事態が発生する可能性が高いです。

デフォルトのルック・アンド・フィール

デフォルトのルック・アンド・フィールのクラスは、次の方法で選択されます。
  1. システム・プロパティのswing.defaultlafnon-nullの場合、このプロパティの値をデフォルトのルック・アンド・フィールのクラス名として使用します。
  2. Propertiesファイルのswing.propertiesが存在し、キーswing.defaultlafが格納されている場合、その値をデフォルトのルック・アンド・フィールのクラス名として使用します。 swing.propertiesが確認される場所は、Javaプラットフォームの実装によって異なる可能性があります。 通常、swing.propertiesファイルは、Javaインストール・ディレクトリのconfサブディレクトリにあります。 詳細は、使用する実装のリリース・ノートを参照してください。
  3. 上記以外の場合は、クロス・プラットフォームルック・アンド・フィールを使用します。

デフォルト

UIManagerは、UIDefaultsのセットを3組管理します。 これらは順番に、次のとおりです。
  1. 開発者のデフォルト。 わずかに例外はありますが、Swingでは、開発者のデフォルトは変更されません。開発者のデフォルトを変更または使用するのは、開発者自身です。
  2. ルック・アンド・フィールのデフォルト。 ルック・アンド・フィールのデフォルトは、ルック・アンド・フィールを現在のルック・アンド・フィールとしてインストールしたとき(setLookAndFeel()が呼び出されたとき)、このルック・アンド・フィールによって提供されます。 ルック・アンド・フィールのデフォルトは、 getLookAndFeelDefaults()メソッドを使って取得できます。
  3. システムのデフォルト。 システムのデフォルトは、Swingによって提供されます。
どのgetメソッドを呼び出しても、各デフォルトが順番にチェックされ、最初に見つかったnon-nullの値が返されます。 たとえば、UIManager.getString("Table.foreground")を呼び出した場合、最初に開発者のデフォルトがチェックされます。 開発者のデフォルトに"Table.foreground"の値が含まれていれば、その値が返されます。そうでない場合は、ルック・アンド・フィールのデフォルト、続いてシステムのデフォルトがチェックされます。

getDefaultsは、この解決ロジックが組み込まれたUIDefaultsのカスタム・インスタンスを返します。 たとえば、UIManager.getDefaults().getString("Table.foreground")UIManager.getString("Table.foreground")と同等です。 どちらも、ここで説明したアルゴリズムに従って解決します。 ドキュメント内では、多くの場合、上記の解決ロジックを備えたUIDefaultsのカスタム・インスタンスを「デフォルト」と呼びます。

ルック・アンド・フィールが変更された場合、UIManagerはルック・アンド・フィールのデフォルトだけを変更します。UIManagerが開発者のデフォルトやシステムのデフォルトを変更することはありません。

特定のルック・アンド・フィールでサポートされるデフォルトのセットは、そのルック・アンド・フィールに定義され、ドキュメント化されています。 さらに、個々のルック・アンド・フィール (または任意のルック・アンド・フィールが提供するComponentUI)が、それぞれのライフ・サイクル内の異なった時期にデフォルトにアクセスする場合があります。 積極的にデフォルトを検索するルック・アンド・フィールもあれば(この場合、ルック・アンド・フィールのインストール後にデフォルトに変更を加えても効果はない)、めったにデフォルトにアクセスしないルック・アンド・フィールもあります。 (この場合、デフォルトの変更が既存のルック・アンド・フィールに影響を及ぼす) 結局、その他のルック・アンド・フィールは、デフォルト・テーブルから自身の設定を行わない可能性があります。 それにもかかわらず、通常、ルック・アンド・フィールはなんらかのデフォルトを求めます。このため、一般に、あるルック・アンド・フィールが提供するComponentUIは、別のルック・アンド・フィールでは動作しません。

警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4では、すべてのJavaBeansの長期ストレージのサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。

導入されたバージョン:
1.2