SYNTH (in J2SE5.0)的基础讲解 --翻译篇

SYNTH

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

   <synth>
     <style id="label">
       <font name="Monospaced" size="18" style="BOLD ITALIC"/>
       <opaque value="true"/>
       <state>
         <color value="PINK" type="FOREGROUND"/>
         <color value="YELLOW" type="BACKGROUND"/>
       </state>
     </style>
     <bind style="label" type="region" key="Label"/>
   </synth>

HelloSynth读取synth.xml,创建一个JLabel,然后把它输出到屏幕。可以看到JLabel的颜色,字体都是通过xml文件来设置的。
具体如下:
18-point bold-italic font,
opaque,
foreground color:pink (text color),
background color:yellow
输出:

下面是另一个 xml的例子:
   <synth>
     <style id="label">
       <opaque value="true"/>
       <font name="Monospaced" size="18" style="BOLD"/>
       <state>
         <color value="RED" type="FOREGROUND"/>
         <color value="BLACK" type="BACKGROUND"/>
       </state>
     </style>
     <bind style="label" type="region" key="Label"/>
   </synth>
输出:

关于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文件来控制从而减少繁冗的代码编写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值