原文地址:html
http://blog.52sox.com/Java-us...
不得不說Swing是Java中GUI編程中1個不錯的包,可是手動編寫Swing是1個很繁瑣的事情。而與其餘GUI工具相比,好比Qt,可以使用Qt Designer來進行頁面繪製。java
因而,便想到能不能經過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字符串:oracle
<?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0" class="java.beans.XMLDecoder"> <object class="javax.swing.JFrame"> <string>測試</string> <void property="size"> <object class="java.awt.Dimension" id="Dimension0"> <void class="java.awt.Dimension" method="getField"> <string>width</string> <void method="set"> <object idref="Dimension0" /> <int>300</int> </void> </void> <void class="java.awt.Dimension" method="getField"> <string>height</string> <void method="set"> <object idref="Dimension0" /> <int>100</int> </void> </void> </object> </void> <void method="add"> <object class="javax.swing.JLabel"> <string>Hello,Swing</string> </object> </void> <void property="defaultCloseOperation"> <int>3</int> </void> <void method="pack" /> <void property="visible"> <boolean>true</boolean> </void> </object> </java>
其中根節點必須爲java,該對象有1個object節點表示其爲1個對象,其中的class屬性指定須要引入的類,而method屬性表示須要調用的方法。對於參數,可使用Java基本類型來表示。
以後咱們編寫1個測試類,對上述XML文件進行加載:app
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工具庫,固然大部分都已經死掉了要麼就是不更新了:佈局
詳情能夠參考。測試
因爲GUI編程如今並再也不流行,沒什麼事情最好仍是儘可能使用HTML來完成頁面佈局。對於簡單的需求,花費的精力和時間會少不少。固然,對於複雜的狀況,建議仍是使用Qt、Wx之類或其餘商業GUI工具完成。 ui
參考文章:spa
https://www.oracle.com/techne...