SwiXML开源框架(一)

一。简介(官网:http://www.swixml.org/index.html)

1.SwinXml是一个生成java程序和applets程序的小巧GUI引擎,接口描述在XML文档中,在运行的时候可以解析XML文档生成javax.swing组件.

2.根据不同的应用程序,XML文件可以从远程加载或者本地加载的方式,在程序运行的时候.

3.在xml文件中,组件类名对应的是标记名,组件方法的名字对应的是标记中的属性名字

 

二。原理分析

1.基本原理:(重要类)

 

2.客户端调用简单例子


import org.swixml.SwingEngine;

import javax.swing.*;

import java.awt.Container;
import java.awt.event.ActionEvent;

public class HelloWorld {
  /** submit counter */
  private int clicks;

  /** JTextField member gets instantiated through Swixml (look for id="tf" in xml descriptor) */
  public JTextField tf;

  /** Jlabel to display number of button clicks */
  public JLabel cnt;

  /** Action appends a '#' to the textfields content.  */
  public Action submit = new AbstractAction() {
    public void actionPerformed( ActionEvent e ) {
      tf.setText( tf.getText() + '#' );
      cnt.setText(String.valueOf( ++clicks ));
    }
  };

  /** Renders UI at construction */
  private HelloWorld() throws Exception {
 SwingEngine swingEngine = new SwingEngine(this);
 Container con =swingEngine.render( "xml/helloworld.xml" );
 con.setVisible(true);
  }

  /** Makes the class bootable */
  public static void main( String[] args ) throws Exception {
    new HelloWorld();
  }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<frame size="640,280" title="Hello SWIXML World" defaultCloseOperation="JFrame.EXIT_ON_CLOSE">

  <panel constraints="BorderLayout.CENTER">
    <label labelfor="tf" font="Georgia-BOLD-12" foreground="blue" text="Hello World!"/>
    <textfield id="tf" columns="20" Text="Swixml"/>
    <button text="Click Here" action="submit"/>
  </panel>

  <panel constraints="BorderLayout.SOUTH">
    <label font="Georgia-BOLD-36" text="Clicks:"/>
    <label font="Georgia-BOLD-36" id="cnt"/>
  </panel>

</frame>

 

3通过以上简单例子分析大体流程

<1>SwingEngine swingEngine = new SwingEngine(this);

       this表示客户端对象,指HelloWorld对象,其拥用Swing组件,通过XML配置文件制定组件,

       SwingEngine解析出Swing组件,赋给客户端对象中对应的组件
       Container con =swingEngine.render( "xml/helloworld.xml" );
<2>SwingEngine调用Parser对象的parser(Document)方法

<3>Parser.parser()方法中,根据Document中的信息,执行以下操作

<3-1>doucment中取得element, 第一次执行时会初始化TagLibrary,TagLibrary会加载程序所有Tag,并创建Tag对应的工厂对象Factory(DefaultFactory)

如:TagLibrary.registerTag( "Button", JButton.class );

然后registerTag( name, new DefaultFactory( template ) );

“Button”是XML文件中的元素节点

<3-2>DefaultFacotry会初始化对应组件所有的set方法。

<3-4>Parser解析Document.根据Tag对应的DefaultFactory创建Swing组件对象,然后根据DefaultFactory中的set方法为Swing组件设置。Tag中的属性值交给Converter接口解析出正确的值,然后赋给Swing组件对象

<3-5>Parser解析Document,组装Swing对象。然后根据配置文件生成对应的组件

<4>SwingEngine根据返回的Swing组件对象,将组件的值设置到客户类中相互对应的值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tof21

支持原创

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值