?? html、swing還是xml,java客戶端工具選擇?(二) [轉(zhuǎn)].txt
字號(hào):
作者:jeru
email: jeru@163.net
日期:8/6/2001 6:07:11 PM
基于Swing的GUI客戶端
今天還有多少人在使用Java Applet作為客戶端?也許使用基于HTML的UI更安全,但這是最好的選擇嗎?
AT&T的一個(gè)業(yè)務(wù)部門Telecorp PCS曾經(jīng)開發(fā)過(guò)一個(gè)應(yīng)用程序,使其商店可以收集希望購(gòu)買移動(dòng)電話的用戶的資料,檢查其信用卡,然后立即開通移動(dòng)電話,除了確認(rèn)用戶輸入的信息外,應(yīng)用還必須通過(guò)使用排序、選擇和其他的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)功能處理提交的報(bào)告。此外,當(dāng)一個(gè)新的移動(dòng)電話開通后,這個(gè)應(yīng)用程序還需要顯示一個(gè)通知。
你能相像用HTML來(lái)完成這一切嗎?也許可能,但它將非常討厭,而且速度很慢,需要不間斷地使用網(wǎng)絡(luò)連接。Telecorp PCS決定冒險(xiǎn)在交互的Applet中使用Java,那么結(jié)果如何呢?完全成功,這一應(yīng)用程序在開發(fā)時(shí)采用了Swing,并布署在采用了Java插件的互聯(lián)網(wǎng)網(wǎng)站上。通過(guò)使用Swing UI類,很簡(jiǎn)單地完成了應(yīng)用所要求的功能。
我相信許多開發(fā)人員在早期使用Java時(shí),都使用過(guò)applet,并且在解決各種瀏覽器之間的不兼容性、applet下載時(shí)間、性能方面花費(fèi)過(guò)大量的時(shí)間。對(duì)客戶端Java最大的批評(píng)來(lái)自其對(duì)象性,但現(xiàn)在情況已經(jīng)有了很大的改觀。Sun已經(jīng)花費(fèi)了大量的時(shí)間來(lái)改進(jìn)其代碼的質(zhì)量,下面我將向你說(shuō)明為什么基于Swing的UI是值得一試的。
Swing及其布署模式
我無(wú)需對(duì)Swing的內(nèi)部架構(gòu)以及類和界面的設(shè)計(jì)、設(shè)計(jì)模板的實(shí)現(xiàn)方面有多少新思想多作敘述了。Swing幾乎是我見過(guò)的最徹底的窗體系統(tǒng),它的容器、組件和UI元素之間的關(guān)系非常清晰。Swing的架構(gòu)是基于Model-View-Controller(MVC)設(shè)計(jì)模板的,其數(shù)據(jù)與數(shù)據(jù)的表達(dá)和處理相互獨(dú)立。
大多數(shù)的Swing模型都是由各種UI元素共享的。例如,JTable使用和JList、JTree相同的模型集,這就使得學(xué)習(xí)和使用Swing非常簡(jiǎn)單,而且Command、Observable和Listener等模板提供了很好的靈活性和良好的面向?qū)ο筇匦浴R苍SSwing架構(gòu)中唯一的不足之處是所有的事件都被交付到相同的EventDispatch線程中,使整個(gè)GUI客戶端應(yīng)用程序只有一個(gè)線程。但我們可以通過(guò)使用不同的線程響應(yīng)用戶的命令而不通過(guò)EventDispatch線程來(lái)完成所有操作,就可以很簡(jiǎn)單地克服Swing這一缺點(diǎn)。
Sun發(fā)布的每個(gè)JDK版本都對(duì)Java和Swing的性能都進(jìn)行了改進(jìn)。JDK 1.3中與Swing相關(guān)的改進(jìn)表現(xiàn)在性能、內(nèi)存消耗和一個(gè)輸入確認(rèn)框架。性能和內(nèi)存消耗方面的改進(jìn)相當(dāng)可觀。我們公司將客戶端的應(yīng)用程序由JDK 1.2.2升級(jí)到1.3后,內(nèi)存消耗降低了30%,一些應(yīng)用程序內(nèi)存占用減少得更多。由于Swing內(nèi)部的初始化過(guò)程被優(yōu)化了,我們的客戶端應(yīng)用程序的運(yùn)行速度和響應(yīng)速度都更快了。簡(jiǎn)而言之,對(duì)速度影響最大的是加載其他界面組件時(shí)自動(dòng)產(chǎn)生的大量的類,而這一方案中只包含有一個(gè)類。另一個(gè)重大的變化是缺省的JVM是HotSpot Client VM,它專門針對(duì)GUI繪制和客戶端應(yīng)用程序執(zhí)行進(jìn)行了優(yōu)化,可以通過(guò)在命令行方式下運(yùn)行java命令得到缺省的JVM。
輸入確認(rèn)框可以使我們很方便地通過(guò)編程實(shí)現(xiàn)命令字段或輸入確認(rèn)。在這以前,如果要在處理下一個(gè)字段之前,對(duì)前一個(gè)用戶輸入進(jìn)行處理,必須在該部件上添加一個(gè)監(jiān)聽程序,每當(dāng)該部件不再是焦點(diǎn)后都需要對(duì)它進(jìn)行確認(rèn),這種方式非常單調(diào)和乏味。使用新的InputVerifier類,可以通過(guò)創(chuàng)建InputVerifier子類的一個(gè)實(shí)例,并將它賦予需要確認(rèn)的JComponent,就能達(dá)到相同的目的。在焦點(diǎn)轉(zhuǎn)換之前,部件將自動(dòng)地調(diào)用verify()方法。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -