先週までNimbus Look&FeelのベースとなるSynth Look&Feelについて解説を行ってきました。今週は,Nimbus Look&Feelがどのように構成されているかについて,紹介していきます。

先週までの解説で,Synth Look&Feelを使うと,XMLドキュメントで外観の設定ができることを紹介しました。では,Nimbus Look&Feelの設定を行っているXMLドキュメントを探してみましょう。

JDKをインストールすると,ソースがアーカイブされたsrc.zipが配置されます。そこで,まずこのsrc.zipを展開してみましょう。src.zipを展開すると,com,java,javaxなどパッケージのトップレベルのディレクトリが作成されます。

Nimbus Look&Feelのソースはcom/sun/java/swing/plaf/nimubsにあります。nimbusディレクトリには100以上のJavaのソースが並んでいます。主にXXXPainter.javaというファイルで,描画を行うクラスであることがわかります。

しかし,そこにはXMLファイルはありません。これはどういうことなのでしょう。

実をいうと,Synth Look&FeelはXMLドキュメントを使用せずともアプリケーションの外観を決めることができます。

JavaのコードによるSynth Look&Feelの設定

今までXMLドキュメントで使用していた要素や属性は,それぞれSynth Look&Feelのクラスに対応しています。

例えば,<style>要素はjavax.swing.plaf.synth.SynthStyleクラスに対応します。そして,<bind>要素に相当するのがjavax.swing.plaf.synth.SynthStyleFactoryクラスです。また,<bind>要素のkey属性がjavax.swing.plaf.synth.Regionクラスに相当することはすでに説明しました。

したがって,JavaでSynth Look&Feelを使用した外観を指定するには,次のような手順を踏みます。

  1. SynthStyelFactoryオブジェクトの生成
  2. 特定の領域に対応するRegionオブジェクトを取得
  3. Regionオブジェクトに対応するSynthStyleオブジェクトを作成
  4. 作成したSynthStyleオブジェクトをRegionオブジェクトをIDとして,SynthStyleFactoryオブジェクトに登録
  5. SynthStyleFactoryオブジェクトをSynthLookAndFeelオブジェクトに登録

実際にはSynthStyleFactoryクラス,SynthStyleクラスは抽象クラスなので,サブクラスを作成する必要があります。

XMLドキュメントを使用した場合,SynthStyleFactoryクラスのサブクラスとしてDefaultSynthStyleFactoryクラス,SynthStyleクラスのサブクラスとしてParsedSynthStyleクラスが使用されます。これらのクラスはパッケージプライベートなクラスなので,Javadocには記載されていません。

このようにJavaのソースコードで設定を行うことが可能です。では,Nimbus Look&Feelはここで示したようにJavaのソースコードだけで設定しているのでしょうか。

答えはYesでもあり,Noでもあります。