Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 316|回复: 0

[Java基础知识]Hello,Synth!

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 22:08:10 | 显示全部楼层 |阅读模式
    SYNTH Synth是J2SE5.0里新引入的Swing组件。 Synth是用户自定义的界面工具(一般被称作skinnable)。用户定义的skin(你叫它皮肤也好)是由一个xml文件控制。这样我们就不必再依靠UIManager去编写属性表来控制界面外观。我们只需要到下面的xml文件中调整部件定义就可以了,基本上省去了代码编写的工作。
    下面是一个简单的例子, --来自sun java技术论坛

      
       
       
    1. import java.awt.BorderLayout;
    2.    import java.awt.EventQueue;
    3.    import java.io.InputStream;
    4.    import java.text.ParseException;
    5.    import javax.swing.JButton;
    6.    import javax.swing.JLabel;
    7.    import javax.swing.JFrame;
    8.    import static javax.swing.JFrame.*;
    9.    import javax.swing.UIManager;
    10.    import javax.swing.plaf.synth.SynthLookAndFeel;
    11.    public class HelloSynth {
    12.      public static void main(String args[]) {
    13.        Runnable runner = new Runnable() {
    14.          public void run() {
    15.            SynthLookAndFeel synth = new SynthLookAndFeel();
    16.            try {
    17.              Class aClass = HelloSynth.class;
    18.              InputStream is =
    19.                 aClass.getResourceAsStream("synth.xml");
    20.              if (is == null) {
    21.                System.err.println("Missing configuration file");
    22.                System.exit(-1);
    23.              }
    24.              synth.load(is, aClass);
    25.            } catch (ParseException e) {
    26.              System.err.println("Bad configuration file");
    27.              System.exit(-2);
    28.            }
    29.            try {
    30.              UIManager.setLookAndFeel(synth);
    31.            } catch
    32.               (javax.swing.UnsupportedLookAndFeelException e) {
    33.              System.err.println("Cannot change to Synth");
    34.              System.exit(-3);
    35.            }
    36.            JFrame frame = new JFrame("First");
    37.            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    38.            JLabel label = new JLabel("Hello, Synth");
    39.            label.setHorizontalAlignment(JLabel.CENTER);
    40.            frame.add(label);
    41.            frame.setSize(300, 100);
    42.            frame.setVisible(true);
    43.          }
    44.        };
    45.        EventQueue.invokeLater(runner);
    46.      }
    47.    }
    复制代码

       

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

            
          

            
          
         
          
      


      



                            function TempSave(ElementID)
                            {
                                    CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
                                    CommentsPersistDiv.save("CommentXMLStore");
                            }
                            function Restore(ElementID)
                            {
                                    CommentsPersistDiv.load("CommentXMLStore");
                                    document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
                            }
                   
                      











    源码下载:http://file.javaxxz.com/2014/10/1/220809859.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-22 06:05 , Processed in 0.412435 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表