Swing/SynthLookAndFeel のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SynthLookAndFeel へ行く。
- 1 (2018-08-13 (月) 15:05:35)
- 2 (2020-08-09 (日) 04:32:55)
- 3 (2022-01-01 (土) 01:40:48)
- 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>
要素のクラス名関係」以外は正確で有用と思われる
- 現在は無効になっている「