Synth是J2SE5.0里新引入的Swing組件。 Synth是可用戶自定義的界面工具(一般被稱作skinnable)。用戶定義的skin(你叫它皮膚也好)是由一個xml文件控制。這樣我們就不必再依靠UIManager去編寫屬性表(其實都是copy來屬性代表的常數(shù)放到調(diào)整屬性的辦法里)來控制界面外觀。我們只需要到上面的xml文件中調(diào)整部件定義就可以了,基本上省去了代碼編寫的工作。
下面是一個簡單的例子, --來自sun java技術(shù)論壇
HelloSynth 創(chuàng)建了一個新的SynthLookAndFeel的對象并用load辦法讀取xml文件:synth.xml。注意synth.load(InputStream,Class>) 的兩個參數(shù),InputStream不用進一步講解,就是讀取xml文件的數(shù)據(jù)流,Class是數(shù)據(jù)來源類,這里當然是HelloSynth的instance: aClass.
下面是synth.xml
HelloSynth讀取synth.xml,創(chuàng)建一個JLabel,然后把它輸出到屏幕??梢钥吹絁Label的顏色,字體都是通過xml文件來設(shè)置的。
具體如下:
18-point bold-italic font,
opaque,
foreground color:pink (text color),
background color:yellow
輸出:
下面是另一個 xml的例子:
輸出:
關(guān)于Synth所應(yīng)用到的xml的格式和語法 請參考:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/doc-files/synthFileFormat.html
關(guān)于Swing組件的屬性參數(shù) 請參考:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/doc-files/componentProperties.html 參考鏈接里面的例子
甚至組件的狀態(tài)--一般以往用到actionListener的地方, 圖形icon的路徑,對象參數(shù)的嵌入(主要是Painter的使用)等等都可以
用xml文件來控制從而減少繁冗的代碼編寫。 _
下面是一個簡單的例子, --來自sun java技術(shù)論壇
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); } }
下面是synth.xml
HelloSynth讀取synth.xml,創(chuàng)建一個JLabel,然后把它輸出到屏幕??梢钥吹絁Label的顏色,字體都是通過xml文件來設(shè)置的。
具體如下:
18-point bold-italic font,
opaque,
foreground color:pink (text color),
background color:yellow
輸出:

下面是另一個 xml的例子:
輸出:

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