内容简介:不得不说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界面。如下所示:
实际上其原理就是使用Java中的JavaBean来实现,类似的还有Spring。当然这里比较简单,当然也可以通过反射及DI的方式自行实现自定义XML文件时生成对应的对象。
不得不说,这个过程比编写swing代码还繁琐。因此还是借助于一些开源的项目来完成这个需求吧,比如XUL。
最后,是Java中一些开源XML的UI工具库,当然大部分都已经死掉了要么就是不更新了:
- Luxor
- SwiXml
- XUI
- jXUL
- Laszlo
详情可以 参考 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
如何把事情做到最好
乔治·伦纳德 / 张乐 / 中国青年出版社 / 2014-2 / 29.90元
•改变全球9800万人的人生指导书 •全美第一本系统阐述学习与成功之道的经典著作 •长期盘踞全美畅销书榜单 •21年后,这本传奇之书终于在中国震撼上市 •把事情做到最好,第一不强求天赋,第二不介意起步的早晚,你要做的就是“起步走”并“不停地走” 《如何把事情做到最好》出 版于1992年,经久不衰,经过一代又一代的读者口碑相传后,畅销至今。作者以其独特的视角告诉人们,如......一起来看看 《如何把事情做到最好》 这本书的介绍吧!