Synth是J2SE5.0里新引入的Swing組件。 Synth是可用戶自定義的界面工具(一般被稱作skinnable)。用戶定義的skin(你叫它皮膚也好)是由一個xml文件控制。這樣我們就不必再依靠UIManager去編寫屬性表(其實都是copy來屬性代表的常數放到調整屬性的辦法里)來控制界面外觀。我們只需要到上面的xml文件中調整部件定義就可以了,基本上省去了代碼編寫的工作。
下面是一個簡單的例子, --來自sun java技術論壇
   import java.awt.BorderLayout;
   import java.awt.EventQueue;
   import java.io.InputStream;
   import java.text.ParseException;
   import javax.swing.JButton;
   import javax.swing.JLabel;
   import javax.swing.JFrame;
   import static javax.swing.JFrame.*;
   import javax.swing.UIManager;
   import javax.swing.plaf.synth.SynthLookAndFeel;

   public class HelloSynth {
     public static void main(String args[]) {
       Runnable runner = new Runnable() {
         public void run() {
           SynthLookAndFeel synth = new SynthLookAndFeel();
           try {
             Class aClass = HelloSynth.class;
             InputStream is = 
                aClass.getResourceAsStream("synth.xml");
             if (is == null) {
               System.err.println("Missing configuration file");
               System.exit(-1);
             }
             synth.load(is, aClass);
           } catch (ParseException e) {
             System.err.println("Bad configuration file");
             System.exit(-2);
           }
           try {
             UIManager.setLookAndFeel(synth);
           } catch 
              (javax.swing.UnsupportedLookAndFeelException e) {
             System.err.println("Cannot change to Synth");
             System.exit(-3);
           }
           JFrame frame = new JFrame("First");
           frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
           JLabel label = new JLabel("Hello, Synth");
           label.setHorizontalAlignment(JLabel.CENTER);
           frame.add(label);
           frame.setSize(300, 100);
           frame.setVisible(true);
         }
       };
       EventQueue.invokeLater(runner);
     }
   }
HelloSynth 創建了一個新的SynthLookAndFeel的對象并用load辦法讀取xml文件:synth.xml。注意synth.load(InputStream,Class) 的兩個參數,InputStream不用進一步講解,就是讀取xml文件的數據流,Class是數據來源類,這里當然是HelloSynth的instance: aClass.
下面是synth.xml

HelloSynth讀取synth.xml,創建一個JLabel,然后把它輸出到屏幕。可以看到JLabel的顏色,字體都是通過xml文件來設置的。
具體如下:
18-point bold-italic font,
opaque,
foreground color:pink (text color),
background color:yellow
輸出:

下面是另一個 xml的例子:
輸出:
關于Synth所應用到的xml的格式和語法 請參考:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/doc-files/synthFileFormat.html
關于Swing組件的屬性參數 請參考:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/doc-files/componentProperties.html 參考鏈接里面的例子
甚至組件的狀態--一般以往用到actionListener的地方, 圖形icon的路徑,對象參數的嵌入(主要是Painter的使用)等等都可以
用xml文件來控制從而減少繁冗的代碼編寫。 _