资讯专栏INFORMATION COLUMN

使用XML构建Swing应用

tomato / 2065人阅读

摘要:而与其他工具相比比如可使用来进行页面绘制。对于参数可以使用基本类型来表示。如下所示实际上其原理就是使用中的来实现类似的还有。当然对于复杂的情况建议还是使用之类或其他商业工具完成。

原文地址:

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字符串:



    
        测试
        
            
                
                    width
                    
                        
                        300
                    
                
                
                    height
                    
                        
                        100
                    
                
            
        
        
            
                Hello,Swing
            
        
        
            3
        
        
        
            true
        
    

其中根节点必须为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

详情可以参考。

结语

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

参考文章:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74348.html

相关文章

  • 学Java编程需要注意的地方

    摘要:学编程真的不是一件容易的事不管你多喜欢或是多会编程,在学习和解决问题上总会碰到障碍。熟练掌握核心内容,特别是和多线程初步具备面向对象设计和编程的能力掌握基本的优化策略。   学Java编程真的不是一件容易的事,不管你多喜欢或是多会Java编程,在学习和解决问题上总会碰到障碍。工作的时间越久就越能明白这个道理。不过这倒是一个让人进步的机会,因为你要一直不断的学习才能很好的解决你面前的难题...

    leanxi 评论0 收藏0
  • 假如时光倒流,我会这么学习Java

    摘要:看起来没有集合框架,线程,等那么耀眼,但它可是很多框架的基础啊回复反射查看相关文章,先把基础学会,后面的得用到它。 回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。[入门]我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让...

    bladefury 评论0 收藏0
  • 关于ajax,json以及jsonp

    摘要:中间部分由或多个以,分隔的关键字值对构成,关键字字符串和值之间以分隔数组结构以开始,结束。 Q:AJAX以何种格式来交换数据?跨域的需求如何解决? A:用JSON来传数据,靠JSONP来跨域(具体参见下文) AJAX 创建对象 AJAX = Asynchronous(英[eɪˈsɪŋkrənəs]) JavaScript and XML(异步的 JavaScript 和 XML)。...

    alighters 评论0 收藏0
  • 推荐给新手的35个好用的Vue开源库

    摘要:无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。所幸的是,随着社区的不断壮大,每天都会出现一些很好的软件包。在下文中,我们将推荐一些非常好用的开源库是一个非常易用的渐进式框架,用于构建用户界面。的一个极简主义的深色设计系统。 无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。对于开发者来说,如果没有这些开源软件包,很难想象我们的生活会变得多么疲惫不堪,而且靠咖啡度日也会成...

    oliverhuang 评论0 收藏0

发表评论

0条评论

tomato

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<