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


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

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

Synth

Synthの各ComponentUI実装は、自身をRegionごとに1つのSynthStyleに関連付けます。ほとんどのComponentsにはRegionが1つしかないため、SynthStyleは1つだけです。 SynthStyleは、スタイルに関連したすべてのプロパティ(フォント、色などのComponentのプロパティ)にアクセスするために使用されます。 また、SynthStyleは、Componentのバックグラウンド、ボーダー、フォーカスなどの部分をペイントするためにSynthPainterを取得する際にも使用されます。 ComponentUIは、SynthStyleSynthStyleFactoryから取得します。 SynthStyleFactoryは、SynthLookAndFeel.setStyleFactory(javax.swing.plaf.synth.SynthStyleFactory)を介して直接提供することも、SynthLookAndFeel.load(InputStream, 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.TABBED_PANE)のRegion、コンテンツ領域(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(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"/>
導入されたバージョン:
1.5