使用XML构建Swing应用

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用XML构建Swing应用脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址:

http://blog.52sox.com/Java-us...

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

1个天真的想法

于是,便想到能不能通过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

详情可以参考

结语

由于GUI编程现在并不再流行,没什么事情最好还是尽量使用HTML来完成页面布局。对于简单的需求,花费的精力和时间会少很多。当然,对于复杂的情况,建议还是使用Qt、Wx之类或其他商业GUI工具完成。

参考文章:

https://www.oracle.com/techne...

脚本宝典总结

以上是脚本宝典为你收集整理的使用XML构建Swing应用全部内容,希望文章能够帮你解决使用XML构建Swing应用所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。