SynthのスタイルをXMLファイルで設定する
Total: 3523
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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>
要素のクラス名関係」以外は正確で有用と思われる
- 現在は無効になっている「