一。简介(官网: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组件对象,将组件的值设置到客户类中相互对应的值