先週まで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を使用した外観を指定するには,次のような手順を踏みます。
- SynthStyelFactoryオブジェクトの生成
- 特定の領域に対応するRegionオブジェクトを取得
- Regionオブジェクトに対応するSynthStyleオブジェクトを作成
- 作成したSynthStyleオブジェクトをRegionオブジェクトをIDとして,SynthStyleFactoryオブジェクトに登録
- SynthStyleFactoryオブジェクトをSynthLookAndFeelオブジェクトに登録
実際にはSynthStyleFactoryクラス,SynthStyleクラスは抽象クラスなので,サブクラスを作成する必要があります。
XMLドキュメントを使用した場合,SynthStyleFactoryクラスのサブクラスとしてDefaultSynthStyleFactoryクラス,SynthStyleクラスのサブクラスとしてParsedSynthStyleクラスが使用されます。これらのクラスはパッケージプライベートなクラスなので,Javadocには記載されていません。
このようにJavaのソースコードで設定を行うことが可能です。では,Nimbus Look&Feelはここで示したようにJavaのソースコードだけで設定しているのでしょうか。
答えはYesでもあり,Noでもあります。