SynthのスタイルをXMLファイルで設定する
Total: 4024, Today: 1, Yesterday: 2
Posted by aterai at
Last-modified:
Summary
SynthLookAndFeelのスタイルをXMLファイルで設定します。
Screenshot

Advertisement
Source Code Examples
Class<?> clz = MainPanel.class;
try (InputStream is = clz.getResourceAsStream("button.xml")) {
SynthLookAndFeel synth = new SynthLookAndFeel();
synth.load(is, clz);
UIManager.setLookAndFeel(synth);
} catch (IOException | ParseException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
View in GitHub: Java, KotlinDescription
上記のサンプルでは、以下のようなXMLファイルでSynthLookAndFeelのスタイルを設定しています。
<synth>
<style id="default">
<font name="Dialog" size="16" />
</style>
<bind style="default" type="region" key=".*" />
<style id="ButtonTest">
<opaque value="true" />
<insets top="10" bottom="10" left="10" right="10" />
<state>
<font name="Verdana" size="24" />
<color type="BACKGROUND" value="#FF0000" />
<color type="TEXT_FOREGROUND" value="#000000" />
</state>
<state value="MOUSE_OVER">
<color type="BACKGROUND" value="ORANGE" />
<color type="TEXT_FOREGROUND" value="WHITE" />
</state>
<state value="PRESSED">
<color type="BACKGROUND" value="BLUE" />
<color type="TEXT_FOREGROUND" value="WHITE" />
</state>
</style>
<bind style="ButtonTest" type="region" key="button" />
<style id="greenButton">
<opaque value="true" />
<insets top="10" bottom="10" left="10" right="10" />
<state>
<font name="Verdana" size="24" />
<color type="BACKGROUND" value="GREEN" />
<color type="TEXT_FOREGROUND" value="#000000" />
</state>
<state value="MOUSE_OVER">
<color type="BACKGROUND" value="RED" />
<color type="TEXT_FOREGROUND" value="WHITE" />
</state>
<state value="PRESSED">
<color type="BACKGROUND" value="BLUE" />
<color type="TEXT_FOREGROUND" value="WHITE" />
</state>
</style>
<bind style="greenButton" type="name" key="green:[0-9]+" />
</synth>
SynthのXMLファイルの詳細(DTDなど)はSynthのファイル形式で参照可能- 特定のコンポーネントにスタイルを設定する場合は、
bind要素のtype属性にkeyではなくnameを設定してkey属性に対象コンポーネントにComponent#setName(...)で設定された名前を正規表現で指定する- 例:
<bind style="greenButton" type="name" key="green:[0-9]+" />で名前がbutton3.setName("green:3");のような形式になっているコンポーネントにgreenButtonスタイルが適用される - 進歩したSynth - IBM developerWorksについて
- 「非
Swingコンポーネントをペイントする」では以下のようにbind要素のtype属性にkeyではなくnameを設定した場合の説明があるが、Java 8のソースコード(javax/swing/plaf/synth/DefaultSynthStyleFactory#getMatchingStyles(...))を確認した限りではコンポーネントのクラス名を対象にする機能は存在しない(1.4では可能だった?のかもしれない)<bind>タグを<bind style="mystyle" type="name" key="Custom.*"/>に変更すると、mystyleスタイルを使うためには、クラス名がCustomで始まる全コンポーネント(例えばCustomTextFieldやCustomLabelなど)を変更することになります。
- 「非
- 例:
Reference
- The Synth Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)
- 進歩したSynth
- 現在は無効になっている「
<bind>要素のクラス名関係」以外は正確で有用と思われる
- 現在は無効になっている「