モジュール java.desktop

パッケージ javax.swing.plaf.synth

Synthは、すべてのペイントが委譲されるスキン設定可能なLook & Feelです。 Synthにはデフォルトの外観はありません。 Synthを使用するためには、ファイルを指定するか、SynthStyleFactoryを提供する必要があります。 どちらの構成オプションを使用する場合も、次に説明する合成アーキテクチャの知識とSwingのアーキテクチャの知識が必要です。

特に指定されていないかぎり、Synthパッケージに定義されたメソッドに対してnullは有効な値ではないため、nullが渡されると、NullPointerExceptionがスローされます。

Synth

SynthのそれぞれのComponentUI実装では、それ自体をRegionごとに1つのSynthStyleと関連付けますが、ほとんどのComponentRegionを1つしか持っていないため、SynthStyleも1つだけとなります。 SynthStyleは、スタイルに関連したすべてのプロパティ(フォント、色などのComponentのプロパティ)にアクセスするために使用されます。 また、SynthStyleは、Componentのバックグラウンド、ボーダー、フォーカスなどの部分をペイントするためにSynthPainterを取得する際にも使用されます。 ComponentUIは、SynthStyleSynthStyleFactoryから取得します。 SynthStyleFactoryは、SynthLookAndFeel.setStyleFactory(javax.swing.plaf.synth.SynthStyleFactory)を介して直接提供することも、SynthLookAndFeel.load(java.io.InputStream, java.lang.Class<?>)を介して間接的に提供することもできます。 次の例では、SynthLookAndFeel.load()メソッドを使用してSynthLookAndFeelを構成し、それを現在のLook & Feelとして設定しています。

     SynthLookAndFeel laf = new SynthLookAndFeel();
     laf.load(MyClass.class.getResourceAsStream("laf.xml"), MyClass.class);
     UIManager.setLookAndFeel(laf);
 

多くのJComponentは小さく分割され、Region内の型保証された列挙によって識別されます。 たとえば、JTabbedPaneは、JTabbedPane用のRegion(Region.TABBED_PANE)、コンテンツ領域(Region.TABBED_PANE_CONTENT)、タブの背後にある領域(Region.TABBED_PANE_TAB_AREA)、およびタブ(Region.TABBED_PANE_TAB)から構成されます。 JComponentの各RegionにはSynthStyleが1つずつあります。 これにより、各JComponentの各領域の個々の部分をカスタマイズできます。

多くのSynthメソッドはSynthContextを取ります。 これは、現在のComponentに関する情報を提供するために使用され、現在のRegionに関連付けられたSynthStyleComponentの状態を表すビット・マスク(有効な状態については、SynthConstantsを参照)、およびペイントされるComponentの部分を識別するRegionが含まれています。

JTextComponent以外によるテキストの描画はすべて、SynthGraphicsUtilsに委譲され、これは、SynthStyleのメソッドSynthStyle.getGraphicsUtils(javax.swing.plaf.synth.SynthContext)を使って取得されます。 テキスト描画は、独自のSynthGraphicsUtilsを指定することでカスタマイズできます。

各コンポーネントのノート

JTree

Synthは、ツリーのセル用の領域Region.TREE_CELLを提供します。 レンダラの色を指定するには、TREE_CELL領域にスタイルを提供します。 次に、この例を示します。

   <style id="treeCellStyle">
     <opaque value="TRUE"/>
     <state>
       <color value="WHITE" type="TEXT_FOREGROUND"/>
       <color value="RED" type="TEXT_BACKGROUND"/>
     </state>
     <state value="SELECTED">
       <color value="RED" type="TEXT_FOREGROUND"/>
       <color value="WHITE" type="BACKGROUND"/>
     </state>
   </style>
   <bind style="treeCellStyle" type="region" key="TreeCell"/>
 

この例では、選択されているときは白地に赤、選択されていないときは赤地に白の色の組み合わせを指定しています。 バックグラウンドを表示するには、ラベルを透明にする必要があります。 このためには、次のXML (抜粋)を使用します。


   <style id="labelStyle">
     <opaque value="FALSE"/>
   </style>
   <bind style="labelStyle" type="region" key="Label"/>
 

JListとJTable

JListとJTableのレンダラで使用する色は、リスト領域とテーブル領域を使って指定します。 次のXML (抜粋)は、選択されているときは白地に赤、選択されていないときは赤地に白の色を指定する方法を示しています。

   <style id="style">
     <opaque value="TRUE"/>
     <state>
       <color value="WHITE" type="TEXT_FOREGROUND"/>
       <color value="RED" type="TEXT_BACKGROUND"/>
       <color value="RED" type="BACKGROUND"/>
     </state>
     <state value="SELECTED">
       <color value="RED" type="TEXT_FOREGROUND"/>
       <color value="WHITE" type="TEXT_BACKGROUND"/>
     </state>
   </style>
   <bind style="style" type="region" key="Table"/>
   <bind style="style" type="region" key="List"/>