摘要:而與其他工具相比比如可使用來(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字符串:
其中根節(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
摘要:學(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í)才能很好的解決你面前的難題...
摘要:看起來(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ù)好用的讓...
摘要:中間部分由或多個(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)。...
摘要:無(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ì)成...
閱讀 1769·2021-11-12 10:36
閱讀 1673·2021-11-12 10:36
閱讀 3503·2021-11-02 14:46
閱讀 3903·2019-08-30 15:56
閱讀 3726·2019-08-30 15:55
閱讀 1526·2019-08-30 15:44
閱讀 1107·2019-08-30 14:00
閱讀 2781·2019-08-29 18:41