国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

tomato / 2233人閱讀

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

原文地址:

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

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

1個(gè)天真的想法

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

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);
    }
}
說得再多不如做得多

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



    
        測試
        
            
                
                    width
                    
                        
                        300
                    
                
                
                    height
                    
                        
                        100
                    
                
            
        
        
            
                Hello,Swing
            
        
        
            3
        
        
        
            true
        
    

其中根節(jié)點(diǎn)必須為java,該對象有1個(gè)object節(jié)點(diǎn)表示其為1個(gè)對象,其中的class屬性指定需要引入的類,而method屬性表示需要調(diào)用的方法。對于參數(shù),可以使用Java基本類型來表示。
之后我們編寫1個(gè)測試類,對上述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è)測試類后就會發(fā)現(xiàn),我們得到了相同的GUI界面。如下所示:

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

Luxor

SwiXml

XUI

jXUL

Laszlo

詳情可以參考。

結(jié)語

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

參考文章:

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

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74348.html

相關(guān)文章

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

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

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

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

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

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

    alighters 評論0 收藏0
  • 推薦給新手的35個(gè)好用的Vue開源庫

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

    oliverhuang 評論0 收藏0

發(fā)表評論

0條評論

tomato

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<