成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java GUI的發(fā)展和演化簡(jiǎn)史

開(kāi)發(fā) 后端
本文對(duì)Java GUI做簡(jiǎn)單的回顧,從最初的AWT到后來(lái)的Swing、Eclipse中的SWT和JFace,Java的GUI應(yīng)用程序庫(kù)異常豐富。

當(dāng)Java在1995年的春天***次發(fā)布的時(shí)候,它包含了一個(gè)叫AWT(Abstract Windowing Toolkit)的庫(kù),用來(lái)構(gòu)建圖形用戶(hù)界面應(yīng)用程序。Java很有雄心的宣言--"write once, run anywhere"許諾:一個(gè)具有下拉菜單,命令按鈕,滾動(dòng)條以及其他常見(jiàn)的GUI控件的應(yīng)用程序?qū)⒛軌蛟诟鞣N操作系統(tǒng)上運(yùn)行而不必重新編譯成針對(duì)某一平臺(tái)的二進(jìn)制代碼,包括Microsoft Windows, Sun’s own Solaris, Apple’s Mac OS以及Linux。

雖然最初Java是支持操作系統(tǒng)獨(dú)立的應(yīng)用程序開(kāi)發(fā),在Java提出"write once, run anywhere"宣言那段時(shí)間的革命導(dǎo)致了Java applet和主導(dǎo)桌面應(yīng)用程序計(jì)劃的產(chǎn)生。

盡管從那以后大部分構(gòu)建桌面應(yīng)用程序的成就都慢慢衰退,Java構(gòu)建圖形用戶(hù)界面的能力反倒增強(qiáng)了。跟蹤Java GUI的發(fā)展和演化,我們將發(fā)現(xiàn)3個(gè)主要的構(gòu)建窗口程序庫(kù):AWT,Swing和SWT(Standard Widget Toolkit)。在這一章里我們將查看和分析這3個(gè)庫(kù)中的每一個(gè)庫(kù),并且我們將一起來(lái)看一看第4個(gè)庫(kù)--JFace。其實(shí)JFace不算一個(gè)真正的構(gòu)建窗口程序庫(kù),而是在基于SWT之上的一個(gè)抽象層。

AWT

很多圍繞著介紹Java技術(shù)的令人激動(dòng)的地方都基于applets--一個(gè)可以讓程序通過(guò)Internet發(fā)布并在瀏覽器內(nèi)執(zhí)行的新技術(shù)。用戶(hù)和開(kāi)發(fā)人員都熱衷于斯,因?yàn)閍pplets許諾將簡(jiǎn)化跨平臺(tái)應(yīng)用程序的開(kāi)發(fā),維護(hù)和發(fā)布,而這是商業(yè)軟件開(kāi)發(fā)中幾個(gè)最富挑戰(zhàn)性的話(huà)題。

為了方便用Java構(gòu)建圖形用戶(hù)界面,Sun最初提供了一個(gè)在所有平臺(tái)下具有的獨(dú)特Java外觀的圖形界面庫(kù)。Sun在applet技術(shù)策略方面的首要伙伴Netscape提出applets應(yīng)該維持和運(yùn)行時(shí)平臺(tái)一樣的外觀。他們希望applets在某一平臺(tái)下在顯示和行為上能夠像其他應(yīng)用程序一樣。

為了實(shí)現(xiàn)Netscape的"本地外觀"的目標(biāo),在JDK的***個(gè)發(fā)布版中包含了AWT這個(gè)庫(kù)。AWT的缺省實(shí)現(xiàn)使用了"對(duì)等"機(jī)制,即每一個(gè)Java GUI窗口部件都在底層的窗口系統(tǒng)中有一個(gè)對(duì)應(yīng)的組件。

例如,每一個(gè)java.awt.Button對(duì)象將在底層窗口系統(tǒng)中創(chuàng)建一個(gè)唯一對(duì)應(yīng)的button。當(dāng)用戶(hù)點(diǎn)擊那個(gè)按鈕的時(shí)候,事件將從本地實(shí)現(xiàn)庫(kù)傳送到Java虛擬機(jī)里,并且最終傳送到與java.awt.Button對(duì)象相關(guān)聯(lián)的邏輯。對(duì)等系統(tǒng)的實(shí)現(xiàn)以及Java組件與對(duì)等組件之間的交流的實(shí)現(xiàn)都隱藏在底層JVM實(shí)現(xiàn)中,Java語(yǔ)言級(jí)的代碼仍然跨平臺(tái)。

盡管如此,為了保持"write once, run anywhere"的許諾,Java不得不妥協(xié)和折衷。特別的,Java采用了"最小公分母"的方法,即AWT僅僅提供所有本地窗口系統(tǒng)都提供的特性。這就需要開(kāi)發(fā)人員為更多高級(jí)特性開(kāi)發(fā)他們自己的高級(jí)窗口部件,然后提供給用戶(hù)不同的使用體驗(yàn)。

其他的問(wèn)題也減緩了人們對(duì)applets的接受和承認(rèn)。Applets運(yùn)行在一個(gè)安全的"沙箱"里面并且能夠阻止惡意的applets對(duì)文件系統(tǒng),網(wǎng)絡(luò)連接等資源的濫用。盡管沙箱提供了安全性,但它"閹割"了應(yīng)用程序。畢竟一個(gè)應(yīng)用程序不能運(yùn)用一個(gè)網(wǎng)絡(luò)連接來(lái)保存一個(gè)文件是不好的。Java GUI應(yīng)用程序也不能像本地程序一樣響應(yīng)靈敏。這是在當(dāng)前硬件平臺(tái)和Java的解釋性天性下預(yù)期結(jié)果。

所以,用AWT開(kāi)發(fā)的應(yīng)用程序既缺少流行GUI程序的許多特性,又不能達(dá)到在顯示和行為上像用本地窗口構(gòu)建庫(kù)開(kāi)發(fā)的程序一樣的目標(biāo)。應(yīng)該有一個(gè)更好的庫(kù)來(lái)讓Java GUI取得成功。

Swing

于1997年JavaOne大會(huì)上提出并在1998年5月發(fā)布的JFC(Java Foundation Classes)包含了一個(gè)新的使用Java窗口開(kāi)發(fā)包。這個(gè)新的GUI組件叫做Swing,感覺(jué)到它是對(duì)AWT的升級(jí),并且看起來(lái)對(duì)Java占據(jù)計(jì)算機(jī)世界很有幫助。對(duì)Java來(lái)說(shuō)已經(jīng)萬(wàn)事具備了:可下載的applets將是未來(lái)的軟件,人們將從其他操作系統(tǒng)轉(zhuǎn)向JavaOS,從傳統(tǒng)的計(jì)算機(jī)轉(zhuǎn)向叫做JavaStation的瘦客戶(hù)端網(wǎng)絡(luò)計(jì)算機(jī),Microsoft將最終因?yàn)椴荒茉谧烂娉绦蝾I(lǐng)域與之想抗衡而被廢黜。雖然這些景象從來(lái)沒(méi)有實(shí)現(xiàn),Swing作為Java applets和applications的GUI庫(kù)倒確實(shí)十分繁榮。

Swing架構(gòu)

盡管"Swing"僅僅是這個(gè)新組件的指代名稱(chēng),它一直持續(xù)使用到今天。可能是因?yàn)檫@個(gè)名稱(chēng)太貼切了,Swing嘗試著以以下幾種方式改變公認(rèn)的觀點(diǎn):

AWT依賴(lài)對(duì)等架構(gòu),用Java代碼包裝本地窗口部件,Swing卻根本不使用本地代碼和本地窗口部件

AWT把繪制屏幕交給本地窗口部件,Swing自己的組件繪制自己

因?yàn)镾wing不依賴(lài)本地窗口部件,它可以?huà)仐堿WT的最小公分母的方法并在每個(gè)平臺(tái)下實(shí)現(xiàn)每個(gè)窗口部件,從而創(chuàng)建一個(gè)比AWT更強(qiáng)大的開(kāi)發(fā)工具包

Swring缺省情況下采用本地平臺(tái)的顯示外觀。然而,它并不僅僅限于此,而是還可以采用插件式的顯示外觀。因此Swing應(yīng)用程序可以看起來(lái)想Windows應(yīng)用程序,Motif應(yīng)用程序,Mac應(yīng)用程序甚至它自己的顯示外觀--"金屬"。所以,Swing應(yīng)用程序可以完全忽略它運(yùn)行時(shí)所在的操作系統(tǒng)環(huán)境并且僅僅看起來(lái)像自己。這是單調(diào)一致的桌面應(yīng)用程序外觀的一大挑釁。想象一下Swing有多傲慢!

盡管如此,Swing組件超越了簡(jiǎn)單的窗口部件,它體現(xiàn)了正不斷出現(xiàn)的設(shè)計(jì)模式以及一些***實(shí)踐。采用Swing,你不僅僅得到GUI窗口部件的句柄和它所包含的數(shù)據(jù),而是定義一個(gè)模型去保存數(shù)據(jù),定義一個(gè)視圖去顯示數(shù)據(jù),定義一個(gè)控制器去響應(yīng)用戶(hù)輸入。事實(shí)上,大部分Swing組件的構(gòu)建是基于MVC(model-view-controller)模式的。MVC使應(yīng)用程序開(kāi)發(fā)變得更清晰,更易維護(hù)和管理。

Swing的缺點(diǎn)

盡管Swing在AWT的基礎(chǔ)上做出了巨大的改進(jìn),它仍然沒(méi)能使Java作為構(gòu)建桌面應(yīng)用程序的工具。也許Swing的擁護(hù)者會(huì)立即舉出Swing的成功應(yīng)用案例,例如開(kāi)源文本編輯器jEdit或者Borland的UML(Unified Modeling Language)建模工具Together,但是Swing應(yīng)用程序仍然在桌面應(yīng)用方面顯得很少。Sun提出了一個(gè)記錄可得到的Swing應(yīng)用程序的列表"Swing Sightings"來(lái)證明Swing應(yīng)用是值得注目的。然而我們也看到了"C++ Sightings"和"Visual Basic Sightings"的網(wǎng)頁(yè)。

為什么Swing沒(méi)有履行它的諾言?原因可能歸結(jié)為下面兩點(diǎn):

速度的缺乏

界面外觀

Swing的狂熱者可能會(huì)對(duì)Swing速度慢這一點(diǎn)感到忿忿不平。不可否認(rèn),JIT(just-in-time)編譯器,Java虛擬機(jī)以及Java語(yǔ)言本身就使得Swing應(yīng)用程序和本地程序拉開(kāi)了一定差距。盡管如此,Swing仍顯得比本地應(yīng)用程序行動(dòng)緩慢和響應(yīng)不積極。由于桌面計(jì)算變得越來(lái)越快,用戶(hù)的速度期望值也隨之增加,任何可感知的遲緩都將是無(wú)法忍受的。

對(duì)Swing的顯示外觀的問(wèn)題的抱怨也引起了Swing的開(kāi)發(fā)者的憤怒。畢竟他么宣稱(chēng)Swing擁有各種可插入式的外觀,并且事實(shí)上可以顯示成任何樣子。J2SE 1.4.2 甚至添加了對(duì)Windows XP和GTK+的支持,以致于在這些平臺(tái)下運(yùn)行的Swing應(yīng)用程序會(huì)自動(dòng)采用該平臺(tái)的外觀。

盡管如此,問(wèn)題仍然存在:Swing將一直處于***的圖形用戶(hù)界面的后面,因?yàn)楸匦柙贘ava庫(kù)里明確地添加對(duì)***GUI的支持。當(dāng)使用J2SE 1.4.2 或更早的版本時(shí)在Windows XP上運(yùn)行的Swing應(yīng)用程序?qū)@現(xiàn)為Windows 98的外觀。而且,當(dāng)使用XP themes或WindowBlinds等軟件來(lái)改變皮膚或圖形外觀時(shí)用戶(hù)日益銘記他們自己的特征和個(gè)性。而Swing不僅不理會(huì)操作系統(tǒng),甚至連用戶(hù)參數(shù)選擇也不理會(huì)。

簡(jiǎn)短的說(shuō),Swing應(yīng)用程序不像本地應(yīng)用程序一樣執(zhí)行,外觀也不一樣。Java要想擺脫常年以來(lái)處于不斷學(xué)習(xí)中的地位并掌握桌面應(yīng)用程序開(kāi)發(fā)中的眾多角色,它的GUI仍需要改進(jìn)。

SWT

當(dāng)Eclipse.org社區(qū)人員開(kāi)始構(gòu)建Eclipse時(shí),他們意識(shí)到Swing和AWT都不足以用來(lái)構(gòu)建真實(shí)世界的商業(yè)程序。結(jié)果,他們決定構(gòu)建一套新的GUI開(kāi)發(fā)工具包用來(lái)顯示Eclipse界面。這個(gè)工具包借用了VisualAge SmallTalk中的大量的庫(kù)。他們把這個(gè)新的工具包命名為SWT(Standard Widget Toolkit).意識(shí)到本地行為需要本地窗口部件,SWT的設(shè)計(jì)者們采用了AWT的對(duì)等架構(gòu),而僅僅當(dāng)本地組件不存在時(shí)(例如Motif下的樹(shù)形組件)才求助于Java實(shí)現(xiàn)。這樣,SWT吸收了AWT和Swing實(shí)現(xiàn)的***的部分:當(dāng)可以得到本地組件時(shí)使用本地實(shí)現(xiàn),當(dāng)不能得到本地組件時(shí)使用Java實(shí)現(xiàn)。這就同時(shí)保證了與本地窗口部件相當(dāng)?shù)耐庥^和響應(yīng)度。

SWT于2001年與Eclipse IDE(Integrated Development Environment)一起集成發(fā)布。在這個(gè)最初發(fā)布版之后,SWT發(fā)展和演化為一個(gè)獨(dú)立的版本。它可以使用與眾多操作系統(tǒng),包括Microsoft Windows,Mac OS X以及幾種不同風(fēng)格的Unix等。寫(xiě)作本書(shū)的這個(gè)時(shí)候,當(dāng)前官方發(fā)布版本為2.1.3。3.0版為beta版,現(xiàn)在也可以下載。本系列文章采用SWT 3.0。

另一個(gè)重要的優(yōu)勢(shì)為SWT的源代碼是在一個(gè)開(kāi)源許可下免費(fèi)可得并無(wú)病毒的。這就意味著你可以在你的應(yīng)用程序中使用SWT并且在任何許可認(rèn)證下發(fā)布它。源代碼對(duì)理解SWT庫(kù)的低級(jí)別功能性和調(diào)試應(yīng)用程序都是很有幫助的。開(kāi)源軟件也意味著比商業(yè)發(fā)布軟件更新的更加頻繁。

JFace

JFace的構(gòu)建基于SWT,它提供了SWT的功能和更簡(jiǎn)易的MVC模式。SWT使用直接的API提供了原生的窗口部件,例如,你創(chuàng)建一個(gè)table部件并且插入你想顯示的行和列的數(shù)據(jù)。JFace則提供了在SWT基礎(chǔ)之上的抽象層,所以你可以對(duì)抽象層編程然后抽象層與SWT API交互來(lái)替代直接對(duì)SWT API編程。考慮一下對(duì)本地C窗口部件接口編程同使用C++GUI類(lèi)庫(kù)的區(qū)別或是使用AWT與Swing的區(qū)別。這些類(lèi)比將有助于闡述SWT與JFace的區(qū)別。例如,為了使用JFace中的table,你仍舊創(chuàng)建table窗口部件,但是你不向里面插入數(shù)據(jù)。反而,你將你的content(或model) provider類(lèi)和你的display(或 view) provider類(lèi)提供給它。接著,table調(diào)用你提供的類(lèi)來(lái)決定數(shù)據(jù)內(nèi)容和怎樣顯示數(shù)據(jù)內(nèi)容。 JFace沒(méi)有徹底地抽象SWT。即使在用JFace寫(xiě)的程序中也會(huì)常常出現(xiàn)SWT及它的低級(jí)API。在本文第二部分帶領(lǐng)您構(gòu)建正確的SWT基礎(chǔ)之后,我們將在第三部分探究JFace的力量。

總結(jié)

從最開(kāi)始Java就提供了構(gòu)建跨平臺(tái)的窗口GUI應(yīng)用程序庫(kù),從AWT,Swing到現(xiàn)在的SWT和JFace。最初的工具包能力微弱,但是后來(lái)提供的工具包認(rèn)識(shí)到之前工具包的缺點(diǎn)并取得了巨大的進(jìn)步。SWT和JFace不僅使Java成為一個(gè)構(gòu)建桌面應(yīng)用程序的可行的選擇,也使之成為一個(gè)具有優(yōu)勢(shì)的開(kāi)發(fā)平臺(tái)。盡管過(guò)去對(duì)得到輕便和強(qiáng)大的Java系統(tǒng)的嘗試必然意味著接受它在GUI方面的缺點(diǎn),如今這個(gè)不足已經(jīng)不存在了,Java終于可以統(tǒng)領(lǐng)它在桌面計(jì)算應(yīng)用方面的位置了。

 

【編輯推薦】

  1. Java GUI:在Swing中設(shè)計(jì)windowclosing()
  2. Java GUI開(kāi)發(fā)工具Netbeans介紹
  3. 生成Netbeans 6.5 GUI應(yīng)用程序簡(jiǎn)介
  4. Java開(kāi)源軟件六大幫派
  5. 淺談如何為Java創(chuàng)建Pair類(lèi)
責(zé)任編輯:佚名 來(lái)源: 賽迪網(wǎng)
相關(guān)推薦

2017-04-11 15:43:39

JavaScript模塊演化

2012-09-21 13:30:51

Java多線(xiàn)程Java發(fā)展

2011-09-15 12:35:42

互聯(lián)網(wǎng)

2013-03-04 15:04:16

2019-08-27 16:23:41

Docker虛擬化虛擬機(jī)

2022-04-25 15:55:58

C 語(yǔ)言編程語(yǔ)言Java

2017-06-21 20:54:40

電子技術(shù)計(jì)算機(jī)電子

2021-07-05 09:40:25

iSCSI存儲(chǔ)協(xié)議以太網(wǎng)

2013-09-17 11:19:20

京東虛擬化

2013-09-16 10:26:25

虛擬化京東

2018-03-21 06:47:02

移動(dòng)通信5G互聯(lián)網(wǎng)

2020-12-04 09:30:18

HTTPWeb前端

2015-12-01 10:36:11

2011-06-23 12:02:43

SPARC云計(jì)算服務(wù)器

2021-08-14 09:23:03

即時(shí)通訊IM互聯(lián)網(wǎng)

2011-01-11 10:00:35

網(wǎng)絡(luò)文件系統(tǒng)NFS

2009-07-03 11:47:00

2022-06-27 08:00:00

無(wú)代碼軟件編程程序員

2009-05-05 09:30:01

2020-09-29 11:51:30

云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一本一道久久a久久精品综合 | 一区二区三区小视频 | 亚洲成人综合在线 | 日韩欧美在线观看 | 18gay男同69亚洲网站 | 一区二区三区av | 中国一级毛片免费 | 欧美一区二区三区在线观看 | 亚洲精品久久久一区二区三区 | 99视频入口 | 天天干天天操 | av在线视| 亚洲国产情侣 | 综合国产在线 | 国产一区二区三区在线 | 国产精品无码专区在线观看 | 精品国产三级 | 久久久一二三区 | 日韩高清中文字幕 | 中文字幕一页二页 | 亚洲国产精品一区 | 亚洲伊人久久综合 | 二区在线观看 | 国产乱码一二三区精品 | 久久夜色精品国产 | 国产精品综合久久 | 超碰av免费| 日韩成人在线视频 | 中文字幕亚洲一区 | 在线成人免费视频 | 国产在线观 | 欧美一区二区在线观看视频 | 91免费观看视频 | 日本三级全黄三级a | 97综合在线 | 日韩中文字幕视频在线 | 国产一区二区免费 | 成人激情视频在线 | 亚洲国产精品一区二区第一页 | 99精品视频免费观看 | 黄色一级电影免费观看 |