亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

使用XML構(gòu)建Swing應(yīng)用

tomato / 2322人閱讀

摘要:而與其他工具相比比如可使用來(lái)進(jìn)行頁(yè)面繪制。對(duì)于參數(shù)可以使用基本類型來(lái)表示。如下所示實(shí)際上其原理就是使用中的來(lái)實(shí)現(xiàn)類似的還有。當(dāng)然對(duì)于復(fù)雜的情況建議還是使用之類或其他商業(yè)工具完成。

原文地址:

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

不得不說(shuō)Swing是Java中GUI編程中1個(gè)不錯(cuò)的包,但是手動(dòng)編寫(xiě)Swing是1個(gè)很繁瑣的事情。而與其他GUI工具相比,比如Qt,可使用Qt Designer來(lái)進(jìn)行頁(yè)面繪制。

1個(gè)天真的想法

于是,便想到能不能通過(guò)XML的方式來(lái)構(gòu)建Swing應(yīng)用呢?下面是1個(gè)簡(jiǎn)單嘗試的過(guò)程,假設(shè)我們通過(guò)如下的代碼生成1個(gè)簡(jiǎn)單的例子:

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("測(cè)試");
        frame.setSize(WIDTH, HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        JLabel label = new JLabel("Hello,Swing");
        frame.add(label);
    }
}
說(shuō)得再多不如做得多

為了動(dòng)態(tài)根據(jù)XML生成上述代碼,我們可以使用XMLEncoder對(duì)其進(jìn)行序列化,可以得到類似如下的XML字符串:



    
        測(cè)試
        
            
                
                    width
                    
                        
                        300
                    
                
                
                    height
                    
                        
                        100
                    
                
            
        
        
            
                Hello,Swing
            
        
        
            3
        
        
        
            true
        
    

其中根節(jié)點(diǎn)必須為java,該對(duì)象有1個(gè)object節(jié)點(diǎn)表示其為1個(gè)對(duì)象,其中的class屬性指定需要引入的類,而method屬性表示需要調(diào)用的方法。對(duì)于參數(shù),可以使用Java基本類型來(lái)表示。
之后我們編寫(xiě)1個(gè)測(cè)試類,對(duì)上述XML文件進(jìn)行加載:

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();
            }
        }
    }
}

當(dāng)運(yùn)行這個(gè)測(cè)試類后就會(huì)發(fā)現(xiàn),我們得到了相同的GUI界面。如下所示:

實(shí)際上其原理就是使用Java中的JavaBean來(lái)實(shí)現(xiàn),類似的還有Spring。當(dāng)然這里比較簡(jiǎn)單,當(dāng)然也可以通過(guò)反射及DI的方式自行實(shí)現(xiàn)自定義XML文件時(shí)生成對(duì)應(yīng)的對(duì)象。
不得不說(shuō),這個(gè)過(guò)程比編寫(xiě)swing代碼還繁瑣。因此還是借助于一些開(kāi)源的項(xiàng)目來(lái)完成這個(gè)需求吧,比如XUL。
最后,是Java中一些開(kāi)源XML的UI工具庫(kù),當(dāng)然大部分都已經(jīng)死掉了要么就是不更新了:

Luxor

SwiXml

XUI

jXUL

Laszlo

詳情可以參考。

結(jié)語(yǔ)

由于GUI編程現(xiàn)在并不再流行,沒(méi)什么事情最好還是盡量使用HTML來(lái)完成頁(yè)面布局。對(duì)于簡(jiǎn)單的需求,花費(fèi)的精力和時(shí)間會(huì)少很多。當(dāng)然,對(duì)于復(fù)雜的情況,建議還是使用Qt、Wx之類或其他商業(yè)GUI工具完成。

參考文章:

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74348.html

相關(guān)文章

  • 學(xué)Java編程需要注意的地方

    摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會(huì)編程,在學(xué)習(xí)和解決問(wèn)題上總會(huì)碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。   學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會(huì)Java編程,在學(xué)習(xí)和解決問(wèn)題上總會(huì)碰到障礙。工作的時(shí)間越久就越能明白這個(gè)道理。不過(guò)這倒是一個(gè)讓人進(jìn)步的機(jī)會(huì),因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...

    leanxi 評(píng)論0 收藏0
  • 假如時(shí)光倒流,我會(huì)這么學(xué)習(xí)Java

    摘要:看起來(lái)沒(méi)有集合框架,線程,等那么耀眼,但它可是很多框架的基礎(chǔ)啊回復(fù)反射查看相關(guān)文章,先把基礎(chǔ)學(xué)會(huì),后面的得用到它。 回頭看看, 我進(jìn)入Java 領(lǐng)域已經(jīng)快15個(gè)年頭了, 雖然學(xué)的也一般, 但是分享下我的心得,估計(jì)也能幫大家少走點(diǎn)彎路。[入門(mén)]我在2001年之前是C/C++陣營(yíng), 有C和面向?qū)ο蟮幕A(chǔ), 后來(lái)轉(zhuǎn)到Java ,發(fā)現(xiàn)沒(méi)有指針的Java真是好簡(jiǎn)單, 另外Java 的類庫(kù)好用的讓...

    bladefury 評(píng)論0 收藏0
  • 關(guān)于ajax,json以及jsonp

    摘要:中間部分由或多個(gè)以,分隔的關(guān)鍵字值對(duì)構(gòu)成,關(guān)鍵字字符串和值之間以分隔數(shù)組結(jié)構(gòu)以開(kāi)始,結(jié)束。 Q:AJAX以何種格式來(lái)交換數(shù)據(jù)?跨域的需求如何解決? A:用JSON來(lái)傳數(shù)據(jù),靠JSONP來(lái)跨域(具體參見(jiàn)下文) AJAX 創(chuàng)建對(duì)象 AJAX = Asynchronous(英[e??s??kr?n?s]) JavaScript and XML(異步的 JavaScript 和 XML)。...

    alighters 評(píng)論0 收藏0
  • 推薦給新手的35個(gè)好用的Vue開(kāi)源庫(kù)

    摘要:無(wú)論是開(kāi)發(fā)新手還是經(jīng)驗(yàn)豐富的老手,我們都喜歡開(kāi)源軟件包。所幸的是,隨著社區(qū)的不斷壯大,每天都會(huì)出現(xiàn)一些很好的軟件包。在下文中,我們將推薦一些非常好用的開(kāi)源庫(kù)是一個(gè)非常易用的漸進(jìn)式框架,用于構(gòu)建用戶界面。的一個(gè)極簡(jiǎn)主義的深色設(shè)計(jì)系統(tǒng)。 無(wú)論是開(kāi)發(fā)新手還是經(jīng)驗(yàn)豐富的老手,我們都喜歡開(kāi)源軟件包。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),如果沒(méi)有這些開(kāi)源軟件包,很難想象我們的生活會(huì)變得多么疲憊不堪,而且靠咖啡度日也會(huì)成...

    oliverhuang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<