Swing/SynthLookAndFeel のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SynthLookAndFeel へ行く。
- category: swing folder: SynthLookAndFeel title: SynthのスタイルをXMLファイルで設定する tags: [SynthLookAndFeel, LookAndFeel] author: aterai pubdate: 2018-08-13T14:59:12+09:00 description: SynthLookAndFeelのスタイルをXMLファイルで設定します。 image: https://drive.google.com/uc?id=1yPNRdiUSVu_8dPLvMFdctKzE9Tnp-hSXDA
概要
SynthLookAndFeelのスタイルをXMLファイルで設定します。
Screenshot

Advertisement
サンプルコード
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, Kotlin解説
上記のサンプルでは、以下のような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など)を変更することになります。
- 「非
- 例:
参考リンク
- The Synth Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)
- 進歩したSynth
- 現在は無効になっている「
<bind>要素のクラス名関係」以外は正確で有用と思われる
- 現在は無効になっている「