ルックアンドフィールの操作


Windowsに用意されているルックアンドフィール。

WindowsのJava 5以降でプログラムを実行した場合の結果が上の図です。この環境では、標準で以下の4種類のルックアンドフィールが用意されています。

・Metal――Javaのオリジナル・ルックアンドフィールです。Java 5以降では、「Ocean」と呼ばれるテーマが標準となり、かなりきれいで、Windowsで利用しても違和感の少ないルックアンドフィールとなっています。

・CDE/Motif――Linux/UNIXの世界で古くから用いられてきたルックアンドフィールです。

・Windows――Windows XP以降で使われている、新しいルックアンドフィールです。Vistaでは、Vistaとほぼ同じようなデザインで表示されます。

・Windows Classic――Windows 2000まで使われてきたルックアンドフィールです。

では、これらのルックアンドフィールドはどのようにして設定されるのでしょうか。ソースコードを見てみると、ationPerformedメソッドにルックアンドフィール変更の処理が用意されています。

UIManager.setLookAndFeel( ルックアンドフィール );


まず、UIManagerクラスのsetLookAndFeelメソッドで、使用するルックアンドフィールを変更します。引数には、ルックアンドフィールのクラスか、クラス名のStringを指定します。ルックアンドフィールの変更は、たったこれだけです。ただし、これはあくまで設定が変更されるだけなので、既に表示されているGUIなどの表示はそのままです。

SwingUtilities.updateComponentTreeUI(this);


そこで、現在既に表示されているGUIのルックアンドフィールを最新の状態に更新してやります。これはSwingUtilitiesのupdateComponentTreeUIメソッドで行います。引数にコンポーネントを渡すと、そのコンポーネントおよびコンポーネント内に組み込まれているコンポーネントを全て更新します。ここでthis(表示しているウインドウ)を渡せば、そのウインドウ内に組み込まれている全てのコンポーネント類が更新されるというわけです。

ルックアンドフィールを調べる


では、このルックアンドフィールというのは、どこにどうやって格納されているのでしょう。どんなルックアンドフィールがあるのか、どうやって調べればいいのでしょうか。ここでは、利用可能なルックアンドフィールを以下のようにして調べていますね。

UIManager.LookAndFeelInfo[] arr = UIManager.getInstalledLookAndFeels();


UIManagerクラスの「getInstalledLookAndFeels」は、利用可能なルックアンドフィールをすべて取得するためのものです。これは、ルックアンドフィールを「UIManager.LookAndFeelInfo」というクラスの配列として返します。このクラスは、ルックアンドフィールに関する情報を管理するためのものです。

このUIManager.LookAndFeelInfoから、getNameやgetClassNameといったメソッドを呼び出すことで、ルックアンドフィール名やクラス名を得ることができます。取得したクラス名を使ってsetLookAndFeelを呼び出せば、そのルックアンドフィールに切り替えることができる、というわけです。