SwiXML开源框架(一)

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

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

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

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

二。原理分析

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

SwiXML开源框架(一)_第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组件对象,将组件的值设置到客户类中相互对应的值

你可能感兴趣的:(开源框架)