使用XML构建Swing应用

栏目: 编程语言 · XML · 发布时间: 4年前

内容简介:不得不说Swing是Java中GUI编程中1个不错的包,但是手动编写Swing是1个很繁琐的事情。而与其他GUI工具相比,比如Qt,可使用Qt Designer来进行页面绘制。于是,便想到能不能通过XML的方式来构建Swing应用呢?下面是1个简单尝试的过程,假设我们通过如下的代码生成1个简单的例子:为了动态根据XML生成上述代码,我们可以使用XMLEncoder对其进行序列化,可以得到类似如下的XML字符串:

不得不说Swing是 Java 中GUI编程中1个不错的包,但是手动编写Swing是1个很繁琐的事情。而与其他GUI工具相比,比如Qt,可使用Qt Designer来进行页面绘制。

于是,便想到能不能通过XML的方式来构建Swing应用呢?下面是1个简单尝试的过程,假设我们通过如下的代码生成1个简单的例子:

import javax.swing.JFrame;  
import javax.swing.JLabel;  

public class Test {  
    static final int WIDTH = 300;  
    static final int HEIGHT = 100;  
    public static void main(String[] args) {  
        JFrame frame = new JFrame("测试");  
        frame.setSize(WIDTH, HEIGHT);  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setVisible(true);  
        JLabel label = new JLabel("Hello,Swing");  
        frame.add(label);  
    }  
}

为了动态根据XML生成上述代码,我们可以使用XMLEncoder对其进行序列化,可以得到类似如下的XML字符串:

<?xml version="1.0" encoding="UTF-8"?>  
<java version="1.8.0" class="java.beans.XMLDecoder">  
    <object class="javax.swing.JFrame">  
        <string>测试</string>  
        <void property="size">  
            <object class="java.awt.Dimension" id="Dimension0">  
                <void class="java.awt.Dimension" method="getField">  
                    <string>width</string>  
                    <void method="set">  
                        <object idref="Dimension0" />  
                        <int>300</int>  
                    </void>  
                </void>  
                <void class="java.awt.Dimension" method="getField">  
                    <string>height</string>  
                    <void method="set">  
                        <object idref="Dimension0" />  
                        <int>100</int>  
                    </void>  
                </void>  
            </object>  
        </void>  
        <void method="add">  
            <object class="javax.swing.JLabel">  
                <string>Hello,Swing</string>  
            </object>  
        </void>  
        <void property="defaultCloseOperation">  
            <int>3</int>  
        </void>  
        <void method="pack" />  
        <void property="visible">  
            <boolean>true</boolean>  
        </void>  
    </object>  
</java>

其中根节点必须为java,该对象有1个object节点表示其为1个对象,其中的class属性指定需要引入的类,而method属性表示需要调用的方法。对于参数,可以使用Java基本类型来表示。

之后我们编写1个测试类,对上述XML文件进行加载:

import java.beans.XMLDecoder;  
import java.io.BufferedInputStream;  
import java.io.FileInputStream;  

public class SwingGUI {  
    static String filename = "swing.xml";  
    public static void main(String[] args) {  
        XMLDecoder decoder = null;  
        try {  
            decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream(filename)));  
            decoder.readObject();  

        }catch(Exception e) {  
            e.printStackTrace();  
        }finally {  
            if(decoder!=null) {  
                decoder.close();  
            }  
        }  
    }  
}

当运行这个测试类后就会发现,我们得到了相同的GUI界面。如下所示:

使用XML构建Swing应用

实际上其原理就是使用Java中的JavaBean来实现,类似的还有Spring。当然这里比较简单,当然也可以通过反射及DI的方式自行实现自定义XML文件时生成对应的对象。

不得不说,这个过程比编写swing代码还繁琐。因此还是借助于一些开源的项目来完成这个需求吧,比如XUL。

最后,是Java中一些开源XML的UI工具库,当然大部分都已经死掉了要么就是不更新了:

  • Luxor
  • SwiXml
  • XUI
  • jXUL
  • Laszlo

详情可以 参考


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical Django Projects, Second Edition

Practical Django Projects, Second Edition

James Bennett / Apress / 2009 / 44.99

Build a django content management system, blog, and social networking site with James Bennett as he introduces version 1.1 of the popular Django framework. You’ll work through the development of ea......一起来看看 《Practical Django Projects, Second Edition》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换