摘要:而與其他工具相比比如可使用來進行頁面繪制。對于參數可以使用基本類型來表示。如下所示實際上其原理就是使用中的來實現類似的還有。當然對于復雜的情況建議還是使用之類或其他商業工具完成。
原文地址:
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字符串:
其中根節點必須為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...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74348.html
摘要:學編程真的不是一件容易的事不管你多喜歡或是多會編程,在學習和解決問題上總會碰到障礙。熟練掌握核心內容,特別是和多線程初步具備面向對象設計和編程的能力掌握基本的優化策略。 學Java編程真的不是一件容易的事,不管你多喜歡或是多會Java編程,在學習和解決問題上總會碰到障礙。工作的時間越久就越能明白這個道理。不過這倒是一個讓人進步的機會,因為你要一直不斷的學習才能很好的解決你面前的難題...
摘要:看起來沒有集合框架,線程,等那么耀眼,但它可是很多框架的基礎啊回復反射查看相關文章,先把基礎學會,后面的得用到它。 回頭看看, 我進入Java 領域已經快15個年頭了, 雖然學的也一般, 但是分享下我的心得,估計也能幫大家少走點彎路。[入門]我在2001年之前是C/C++陣營, 有C和面向對象的基礎, 后來轉到Java ,發現沒有指針的Java真是好簡單, 另外Java 的類庫好用的讓...
摘要:中間部分由或多個以,分隔的關鍵字值對構成,關鍵字字符串和值之間以分隔數組結構以開始,結束。 Q:AJAX以何種格式來交換數據?跨域的需求如何解決? A:用JSON來傳數據,靠JSONP來跨域(具體參見下文) AJAX 創建對象 AJAX = Asynchronous(英[e??s??kr?n?s]) JavaScript and XML(異步的 JavaScript 和 XML)。...
摘要:無論是開發新手還是經驗豐富的老手,我們都喜歡開源軟件包。所幸的是,隨著社區的不斷壯大,每天都會出現一些很好的軟件包。在下文中,我們將推薦一些非常好用的開源庫是一個非常易用的漸進式框架,用于構建用戶界面。的一個極簡主義的深色設計系統。 無論是開發新手還是經驗豐富的老手,我們都喜歡開源軟件包。對于開發者來說,如果沒有這些開源軟件包,很難想象我們的生活會變得多么疲憊不堪,而且靠咖啡度日也會成...
閱讀 1699·2021-11-12 10:36
閱讀 1615·2021-11-12 10:36
閱讀 3442·2021-11-02 14:46
閱讀 3798·2019-08-30 15:56
閱讀 3534·2019-08-30 15:55
閱讀 1463·2019-08-30 15:44
閱讀 1044·2019-08-30 14:00
閱讀 2735·2019-08-29 18:41