張 娟 王 艷
[摘要]首先對界面自動生成的原理進行介紹,然后從界面描述文件、界面組建庫設(shè)計、界面組建事件監(jiān)聽類、界面自動生成器設(shè)計和XML文檔復(fù)用這五個方面進行設(shè)計和介紹。
[關(guān)鍵詞]XML 界面自動生成
中圖分類號:TP3文獻標(biāo)識碼:A文章編號:1671-7597(2009)0120082-01
用戶界面是軟件系統(tǒng)的重要組成部分,它主要負(fù)責(zé)接收用戶的輸入信息并顯示程序處理的結(jié)果。隨著軟件系統(tǒng)規(guī)模的不斷擴大,開發(fā)用戶界面所耗費的時間和成本也將成倍增加,因此,怎樣在較短的時間內(nèi)設(shè)計出符合用戶要求的用戶界面,提高用戶界面的開發(fā)效率成了急待解決的一個問題。
一、界面自動生成理論
基于XML的界面自動生成技術(shù)涉及界面描述的XML文檔、界面組件事件監(jiān)聽類、界面生成器、編程語言的組件庫和界面定制工具。界面生成器通過解析界面描述XML文檔,調(diào)用編程語言的組件庫構(gòu)建組件,為組件綁定相應(yīng)的事件監(jiān)聽類,自動生成所需要的用戶界面。
要生成一個界面,首先要提供界面描述XML文檔和界面組件事件監(jiān)聽類。界面描述XML文檔使用XML描述界面上所有組件及其屬性,包括名稱、大小、位置、布局以及與之相對應(yīng)的事件監(jiān)聽類等。界面描述XML文檔可以用XML編輯器來編寫,也可以從其他數(shù)據(jù)源自動生成。界面組件事件監(jiān)聽類負(fù)責(zé)監(jiān)聽并處理對應(yīng)界面描述XML文檔中組件的事件,比如按鈕點擊事件等,由組件事件引發(fā)的一系列操作都由該類來實現(xiàn)。在界面描述XML文檔的解析過程中,界面生成器會根據(jù)文檔中的組件事件屬性值把事件監(jiān)聽類動態(tài)加載進來,并與對應(yīng)的組件綁定。當(dāng)某一組件的事件被觸發(fā)時,就會執(zhí)行它的事件監(jiān)聽類中定義的操作。
二、自動生成界面設(shè)計和實現(xiàn)
界面自動生成技術(shù)由界面定制工具、界面描述文件(XML)、界面組件事件監(jiān)聽類、組件庫、界面自動生成器及生成的界面六大部分組成。在本方案中,還加上了查詢到的XML和具有復(fù)用價值的XML文檔來增加XML文檔的可復(fù)用性。
要生成一個界面首先要啟動一個界面自動生成器,來讀取界面描述文件XML文檔,該文件描述了界面中每個組件的具體信息,如組件類型、名字、對應(yīng)的類名、事件監(jiān)聽類名、位置、尺寸以及響應(yīng)事件和范圍限制屬性等。界面自動生成器根據(jù)這些描述信息對界面中的每個組件進行布局,并增加組件的事件監(jiān)聽功能。每個生成的界面都對應(yīng)一個界面自動生成器對象,它除了負(fù)責(zé)生成界面外,還負(fù)責(zé)保存界面中的所有組件信息及一些界面中使用的全局變量,供事件監(jiān)聽類中的方法使用。
界面自動生成器需要識別界面描述文件中的各種組件類型。因此,就必須定義一個組件庫,使用組件庫中的組件可以很方便地構(gòu)建符合要求的配置界面。當(dāng)然,界面自動生成器也可以讀取一個不屬于該組件庫中的組件,前提是該組件必須是JComponent的子類。界面自動生成器將按照該組件原本的樣式顯示該組件,并由組件自己完成事件監(jiān)聽的功能。自動生成界面的步驟如下:
第一步:根據(jù)顯示界面需要編寫界面描述XML文件,這步由可由界面定制工具輔助實現(xiàn)。
第二步:讀取前臺設(shè)備的硬件數(shù)據(jù),生成界面初始數(shù)據(jù),并設(shè)置到相應(yīng)的組件中。
第三步:初始化界面生成器。
第四步:界面生成器讀取界面描述的XML文件。
第五步:界面生成器根據(jù)描述信息創(chuàng)建界面元素,進行布局并顯示界面。具體包括:①將XML文件中的組件元素進行分離,按照每個組件的尺寸和位置進行界面布局,對于容器組件使用遞歸方法進行解析;②將初始數(shù)據(jù)設(shè)置到各個相應(yīng)的組件中;③完成組件的事件監(jiān)聽。對于組件庫內(nèi)的組件,界面生成器根據(jù)XML文件中定義的組件事件類名,運用JAVA的類反射機制實現(xiàn)該事件類的監(jiān)聽功能;對于組件庫外的JComponent類的子類組件,由組件自己完成事件監(jiān)聽功能。
(一)界面描述文件的實現(xiàn)
界面描述文件使用XML語言來描述,既不能過于簡單,也不能過于復(fù)雜,其表達內(nèi)容包括:①界面主菜單結(jié)構(gòu)的定義;②字段定義或者屬性的描述信息,包括屬性的類型、屬性名稱、屬性是否為主鍵、屬性的值來源類(比如,如果顯示為一個列表框,則可以定義列表框的值來源,可以對應(yīng)于server端的一個業(yè)務(wù)規(guī)則,也可以對應(yīng)于一組固定的值列表)、屬性是否可以編輯、屬性的事件響應(yīng)類;③界面元素的上下文action、action的界面處理方法的定義(應(yīng)用可以定義處理方法類來實現(xiàn)擴展);④界面元素的導(dǎo)航關(guān)系的定義;⑤界面元素的層次關(guān)系的定義等等。
XML文檔第一部分包含一些界面初始化的定義,像
(二)界面組件庫設(shè)計
組件庫的組件封裝了一些獨特的屬性,以實現(xiàn)一定的功能。表1顯示了文本框componentLibrary組件的屬性。
(三)組件監(jiān)聽類設(shè)計
事件監(jiān)聽類的名稱在XML文件中標(biāo)識,就是上文所說的action標(biāo)簽中填寫的類名,由街面生成器負(fù)責(zé)實例化和加載到對應(yīng)組件上。每個組件類都對應(yīng)一個事件監(jiān)聽的基類?;愄峁┝艘恍┍O(jiān)聽事件的方法,通常是空的方法,用戶定制的事件監(jiān)聽類只需要覆蓋這些監(jiān)聽事件方法就可以實現(xiàn)對事件的監(jiān)聽。例如componentLibrary組件對應(yīng)的action基類是TextFieldAction,
該類封裝了componentLibrary的事件監(jiān)聽,包括回車鍵事件和焦點丟失事件。用戶要實現(xiàn)一個componentLibrary組件的事件監(jiān)聽,就必須編寫一個新的類,該類繼承TextFieldAction并覆蓋TextFieldAction中的一些方法。在每個action基類componentLibrary中都提供了public GUIEngine getGe()方法,通過使用該方法可以獲取當(dāng)前界面對應(yīng)的GUIEngine對象,獲取了GUIEngine對象,就可以在事件方法中操縱界面中的任何元素。
(四)界面自動生成器設(shè)計和實現(xiàn)
界面自動生成器處于整個界面自動生成系統(tǒng)的核心地位,一方面向應(yīng)用提供API(Application Programming Interface,應(yīng)用編程接口),由應(yīng)用調(diào)用來創(chuàng)建界面;另一方面向應(yīng)用提供數(shù)據(jù)操作接口,通過配置管理內(nèi)部提供的數(shù)據(jù)庫接口實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的增刪、查改。界面自動生成器使用界面描述語言作為輸入,實現(xiàn)界面的自動化生成和處理。界面自動生成器類是GUIEngine,該類解析界面描述的XML文檔,讀取XML描述文檔中的所有節(jié)點,并根據(jù)節(jié)點描述生成相應(yīng)的組件,綁定組件事件監(jiān)聽器,將組件按照界面的XML描述文件中的定位顯示。
界面器的構(gòu)造函數(shù)是public GUIEngine(InitData InitData)。其中InitData是一個接口類,該接口中包括了界面初始化的必要信息,例如節(jié)點信息、界面組件初始數(shù)據(jù)、XML文檔信息等。
public JComponent createComponent()方法是界面器的核心方法,它讀取XML文檔中組件的相關(guān)描述并構(gòu)造界面中的組件對象,最后將組件放在一個JComponent容器中,并返回。該方法從界面描述文件中讀取組件信息,并判斷組件的類型,根據(jù)不同的組件類型調(diào)用不同的組件的構(gòu)造方法,生成組件對象。如果從獲得的子節(jié)點解析得到的組件不是GUIEngine中預(yù)先定義的組件,則認(rèn)為該組件是用戶自定義的,將該組件按用戶定義的樣式添加到組件容器中去;如果該組件描述錯誤,則給用戶提供一個出錯信息。該方法最后根據(jù)界面描述文檔中各個組件的定位以及控件大小的描述,來設(shè)置組件的大小以及在組件容器中擺放的位置。
對于組件庫中的組件,界面自動生成器都有一個與之對應(yīng)的方法來生成該組件對象,并完成action事件的添加。而Create componentLibrary方法的主要功能就是生成一個componentLibrary組件對象,并根據(jù)描述該組件的XML對象描述的內(nèi)容,為該組件添加相應(yīng)的action。
(五)XML文檔的復(fù)用
在用XML描述界面信息的基礎(chǔ)上,用XML的查詢技術(shù)如Xquery,XPath等進行模型信息的查詢,可將以前的系統(tǒng)開發(fā)所獲得的界面信息用XML文件的形式存儲起來,并組織成一個界面信息庫。對于界面信息的查詢,可以分別從名稱、描述信息、XML文檔中定義的元素和屬性等關(guān)鍵字進行查詢,也可以綜合上述各方面進行復(fù)合查詢。將查詢到的界面描述信息經(jīng)修改和擴展就可加入到新工程的設(shè)計中,能夠大大提高開發(fā)效率。
參考文獻:
[1]張敦華,一種界面自動生成技術(shù)[J].計算機與數(shù)字工程.2004 (5).
[2]徐龍杰,建成.基于模型的用戶界面代碼自動生成.計算機工程與應(yīng)用. 2004(12).
[3]Mike Jasonwski.Java,XML,and Web Service Bible[M].電子工業(yè)出版社.2002.
[4]吳桂陽,建成,清國,成柱.基于XML的界面模板技術(shù).計算機應(yīng)用研究. 2004(10).
[5]李大成,陳莘萌. Java與XML的結(jié)合應(yīng)用[J].計算機應(yīng)用.2002 (2).
作者簡介:
張娟,女 河南許昌人,鄭州大學(xué)升達經(jīng)貿(mào)管理學(xué)院助教,在讀碩士,研究方向:軟件工程,計算機應(yīng)用; 王艷,女 河南淮濱人,鄭州大學(xué)升達經(jīng)貿(mào)管理學(xué)院助教,在讀碩士,研究方向:計算機網(wǎng)絡(luò),數(shù)據(jù)庫技術(shù)。