




免費(fèi)預(yù)覽已結(jié)束,剩余54頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
GWT開發(fā)者手冊格式規(guī)范:這種字體表示代碼或術(shù)語文檔目的:對新進(jìn)員工進(jìn)行GWT技術(shù)培訓(xùn),使他們可以在以前沒有接觸過GWT的基礎(chǔ)上,通過本文檔,經(jīng)過短期學(xué)習(xí),即可使用GWT進(jìn)行日常開發(fā)工作。GWT版本:gwt-windows-1.5.1面向讀者:熟悉Java語言,有用JavaEE開發(fā)三層架構(gòu)軟件系統(tǒng)的經(jīng)驗(yàn)的WEB應(yīng)用程序開發(fā)者。一、基本概念GWT編譯器主要用于把JAVA應(yīng)用程序轉(zhuǎn)換成對應(yīng)的JAVASCRIPT應(yīng)用程序GWT的核心是一個(gè)編譯器,它可以把JAVA代碼轉(zhuǎn)換成JAVASCRIPT代碼,把用于實(shí)際開發(fā)工作的JAVA應(yīng)用程序轉(zhuǎn)變成等價(jià)的JAVASCRIPT應(yīng)用程序,一般來說:1. 如果你的GWT應(yīng)用在主機(jī)模式中編譯運(yùn)行,2. 并且GWT把你的應(yīng)用程序編譯成JAVASCRIPT應(yīng)用程序,而沒有報(bào)錯,3. 那么的你的應(yīng)用程序?qū)酝瑯拥姆绞皆赪EB瀏覽器中工作,就像在主機(jī)模式中一樣。GWT編譯器支持大多數(shù)JAVA語言特性。GWT運(yùn)行時(shí)庫仿真了JAVA運(yùn)行時(shí)庫的一個(gè)子集。注意:1. 語言支持:GWT1.5可以編譯J2SE 1.5或更早版本。但有一些不一致需要注意。l 固有類型byte, char, short, int, long, float, double, Object, String,和數(shù)組都是支持的。畢竟,在JAVASCRIPT語言中沒有64位整型,所以long類型被映射成為JAVASCRIPT的雙精度浮點(diǎn)類型值。為了保證主機(jī)模式和WEB模式中最大的一致性,我們推薦使用int類型變量l 異常try, catch, finally和用戶自定義的異常都可以正常支持,但是注意,在WEB模式中Throwable.getStackTrace()方法不被支持。l 斷言GWT編譯器解析JAVA assert聲明,但是它們不會被生成對應(yīng)的JAVASCRIPT代碼。l 多線程和同步GWT自然接受synchronized關(guān)鍵字,但是由于JAVASCRIPT解析器是單線程的,所以加上該關(guān)鍵字也不會有實(shí)際作用。同步相關(guān)的類庫方法也不可用,包括Object.wait(), Object.notify(), 和 Object.notifyAll()l 反射為了效率最大化,GWT把你的JAVA原代碼編譯成單塊集成腳本,并且不支持類的并發(fā)動態(tài)裝載,另外,也不包括對反射的一般支持。但是可以使用Object.getClass().getName()來查詢一個(gè)對象的類名。l 無用對象清理JAVASCRIPT不支持垃圾回收階段的對象清理,所以GWT不能支持WEB模式下的JAVA對象清理。(JavaScript和Java垃圾回收機(jī)制的不同)l 嚴(yán)格浮點(diǎn)JAVA語言規(guī)范精確地定義了浮點(diǎn)支持,包括單精度和雙精度,還有strictfp關(guān)鍵字。GWT不支持strictfp關(guān)鍵字,并且不能保證在轉(zhuǎn)換后的代碼中的浮點(diǎn)的詳細(xì)精度,所以如果你需要保證精度的計(jì)算,則要避免在客戶端代碼中進(jìn)行。注意:關(guān)于strictfp,可以參考下面的文章:/view/1866622.htm2. 運(yùn)行時(shí)庫支持GWT只支持JAVA2標(biāo)準(zhǔn)版和企業(yè)版類庫的一個(gè)小的子集,由于這些庫非常大,并且有很多在WEB瀏覽器中不可用的功能。詳細(xì)請參考:/intl/zh-CN/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=RefJreEmulation一些特定領(lǐng)域GWT與JAVA標(biāo)準(zhǔn)運(yùn)行時(shí)不同。l 正則表達(dá)式JAVA正則表達(dá)式的語法類似但也不同于JAVASCRIPT的正則表達(dá)式語法。例如,replaceAll 和 split方法。你可能只想使用和JAVASCRIPT同效的JAVA正則表達(dá)式。l 序列化JAVA的序列化依賴于很少的機(jī)制,但這些機(jī)制在編譯后的JAVASCRIPT中不可用,例如動態(tài)類裝載和反射。所以GWT不支持標(biāo)準(zhǔn)JAVA序列化,但是GWT有一個(gè)RPC機(jī)制,它提供了調(diào)用遠(yuǎn)程方法時(shí)與服務(wù)器交互的自動對象序列化。注意:如果你確保在一開始你的客戶端代碼中只使用了可以轉(zhuǎn)換的類,你將會避免很多麻煩。為了能夠盡早確定問題所在,你的代碼將會在主機(jī)模式中運(yùn)行時(shí)被檢查是否符合JRE仿真庫。所以,不支持的類庫將會在第一次運(yùn)行應(yīng)用程序時(shí)被檢測到,應(yīng)該盡早運(yùn)行并經(jīng)常運(yùn)行你的程序??鐬g覽器支持GWT架構(gòu)可以在單一代碼的基礎(chǔ)上支持多瀏覽器。GWT使你不用過于擔(dān)心跨瀏覽器的不相容性。如果你關(guān)注嵌入式的界面元素和組件,你的應(yīng)用程序在最近版本的Internet Explorer, Firefox, 和Safari瀏覽器中的表現(xiàn)是一致的(大多數(shù)情況下,Opera瀏覽器也是這樣)。DHTML用戶界面是非常復(fù)雜的,雖然這樣,也要確定在每個(gè)瀏覽器中徹底測試你的應(yīng)用程序。只要可能,GWT符合瀏覽器的本地用戶界面元素。例如:GWT的Button元素是一個(gè)真正的HTML ,而不是一個(gè)合成的類似按鈕的界面元素,比如,一個(gè)。這說明GWT按鈕在不同的瀏覽器和不同的客戶端操作系統(tǒng)中都能恰當(dāng)?shù)仫@示。我們喜歡本地瀏覽器控制是因?yàn)樗鼈兪强焖佟⒖捎貌⑶冶挥脩羰煜?。?dāng)開發(fā)一個(gè)風(fēng)格化的WEB應(yīng)用程序,CSS是非常理想的。開發(fā)者應(yīng)該在樣式表中定義樣式,這些樣式使用樣式名(style names)鏈接到應(yīng)用程序代碼。在主機(jī)模式中調(diào)試GWT有一個(gè)嵌入式的DHTML瀏覽器,你可以在轉(zhuǎn)換成JAVASCRIPT應(yīng)用之前,在任何JAVA開發(fā)環(huán)境中運(yùn)行和調(diào)試你的應(yīng)用程序。你將會花費(fèi)你的大部分的開發(fā)時(shí)間在主機(jī)模式上,這是說你和你的GWT應(yīng)用程序互動時(shí),不需要先把它轉(zhuǎn)換成JAVASCRIPT。任何時(shí)候你在JAVA集成開發(fā)環(huán)境中編輯、運(yùn)行和調(diào)試應(yīng)用程序,你都是在主機(jī)模式下工作。當(dāng)運(yùn)行在主機(jī)模式,JAVA虛擬機(jī)實(shí)際上是在執(zhí)行編譯后的JAVA字節(jié)碼,使用GWT輸出到一個(gè)嵌入的瀏覽器窗口。在這種傳統(tǒng)的“編碼測試調(diào)試”的開發(fā)周期中,主機(jī)模式是快速開發(fā)你的應(yīng)用的最有效的方式。啟動一個(gè)主機(jī)模式會話,你的啟動類應(yīng)該是com.google.gwt.dev.GWTShell,這個(gè)類可以在gwt-dev-windows.jar (或 gwt-dev-linux.jar)中找到。小提示:在主機(jī)模式下,GWT開發(fā)命令工具(development shell)會使用虛擬機(jī)的類路徑查找模塊(和客戶端原代碼)。在運(yùn)行GWT開發(fā)命令工具(development shell)時(shí)要確保把原代碼路徑加入到了你的類路徑中。在WEB模式中部署為便于部署,首先把你的應(yīng)用編譯成JAVASCRIPT。當(dāng)你從開發(fā)階段轉(zhuǎn)移到端到端測試和生產(chǎn),你會開始更多地和你的應(yīng)用程序在WEB模式下交互。WEB模式是指從通常的瀏覽器來訪問你的應(yīng)用程序在瀏覽器中它作為純凈的JavaScript運(yùn)行正如它最終要被部署的樣子。為你的模塊創(chuàng)建一個(gè)WEB模式版本,你需要使用主機(jī)模式瀏覽器中的“Compile/Browse”按鈕或命令行編譯器com.google.gwt.dev.GWTCompiler. WEB模式論證了是什么使GWT不同凡響:當(dāng)你的應(yīng)用在WEB模式中啟動時(shí),它完全作為JAVASCRIPT運(yùn)行,并且不需要任何瀏覽器插件或JVM。HTML主頁一個(gè)HTML文檔形式的主頁,它包含GWT模塊。任何符合適當(dāng)規(guī)范的HTML頁面可以包含GWT創(chuàng)建的代碼,作為一個(gè)主頁被引用。一個(gè)經(jīng)典的HTML主頁如下所示: Calendar App這個(gè)結(jié)構(gòu)是可以向現(xiàn)存的WEB應(yīng)用程序添加功能而把改動最小化??蛻舳舜a“客戶端”意思是指將要被轉(zhuǎn)換并在WEB瀏覽器中以JAVASCRIPT形式運(yùn)行的原代碼。你的應(yīng)用程序?qū)⒁煌ㄟ^網(wǎng)絡(luò)送向客戶,在那里它作為JAVASCRIPT運(yùn)行在WEB瀏覽器中。用戶瀏覽器中所發(fā)生的一切,可以看作是客戶端處理。當(dāng)你寫在WEB瀏覽器中運(yùn)行的客戶端代碼時(shí),記住它們最終要變成JAVASCRIPT。所以,要使用那些可以被轉(zhuǎn)換的類庫和JAVA語言結(jié)構(gòu)是非常重要的。服務(wù)端代碼“服務(wù)端”意思是指不會被轉(zhuǎn)換,并且只作為字節(jié)碼運(yùn)行在服務(wù)器端的原代碼。發(fā)生在服務(wù)器端的一切可以被看作是服務(wù)器端處理。當(dāng)你的應(yīng)用程序需要與服務(wù)器互動(例如,上載或下載數(shù)據(jù)),這會產(chǎn)生一個(gè)穿過網(wǎng)絡(luò)的客戶端請求(從瀏覽器)使用remote procedure call (RPC)。在進(jìn)行處理時(shí)RPC,服務(wù)器要執(zhí)行服務(wù)端代碼。小提示:GWT不會去管你的服務(wù)器運(yùn)行JAVA字節(jié)碼的能力。服務(wù)端代碼不需要被轉(zhuǎn)換,所以你可以使用你認(rèn)為有用的任何JAVA類庫。項(xiàng)目結(jié)構(gòu)GWT項(xiàng)目由一個(gè)推薦包布局構(gòu)建而成。GWT項(xiàng)目以JAVA包的方式進(jìn)行布局,這樣,大多數(shù)的配置可以從類路徑(classpath)和你的模塊定義(module definitions)中推導(dǎo)出。如果你要從代碼片斷開始一個(gè)GWT項(xiàng)目,你應(yīng)該使用標(biāo)準(zhǔn)GWT包結(jié)構(gòu),這種結(jié)構(gòu)可以很容易地區(qū)分客戶端代碼和服務(wù)端代碼。例如:假定你的新項(xiàng)目叫“Calendar”。則標(biāo)準(zhǔn)包結(jié)構(gòu)會如下所示: 包 目的 com/example/cal/項(xiàng)目根包,包含模塊XML文件com/example/cal/client/客戶端代碼文件和子包c(diǎn)om/example/cal/server/服務(wù)端代碼和子包c(diǎn)om/example/cal/public/靜態(tài)資源例子文件組織如下:文件目的com/example/cal/Calendar.gwt.xml一個(gè)通用基本模塊,用于你的項(xiàng)目,它繼承了com.google.gwt.user.User模塊com/example/cal/CalendarApp.gwt.xml繼承了com.example.cal.Calendar 模塊 (見上)并且加入一個(gè)入口類com/example/cal/CalendarTest.gwt.xml一個(gè)你的項(xiàng)目定義的模塊com/example/cal/client/CalendarApp.java客戶端JAVA原代碼,用于入口類。com/example/cal/client/spelling/SpellingService.java一個(gè)定義在子包中的RPC服務(wù)接口com/example/cal/server/spelling/SpellingServiceImpl.java服務(wù)端JAVA原代碼,它實(shí)現(xiàn)了后臺服務(wù)業(yè)務(wù)邏輯。com/example/cal/public/Calendar.html一個(gè)HTML頁面,用于裝載應(yīng)用程序。com/example/cal/public/Calendar.css一個(gè)樣式表,用于風(fēng)格化應(yīng)用程序。com/example/cal/public/images/logo.gif一個(gè)題頭標(biāo)志模塊模塊是一個(gè)XML文件,它包含與應(yīng)用程序或類庫相關(guān)的設(shè)置。一個(gè)GWT配置的單獨(dú)單元,是XML格式的文件。包括所有的你的GWT項(xiàng)目需要的配置信息,即下列信息:l 繼承模塊l 一個(gè)入口點(diǎn)應(yīng)用類名;這些是可選的,雖然任何關(guān)系到HTML的模塊都必須至少有一個(gè)指定的入口類。l 原代碼路徑l 公共路徑l 延期綁定規(guī)則,包括屬性提供者和類生成器。模塊(Modules)可以出現(xiàn)在你的類路徑的任何包里,但是強(qiáng)力推薦它應(yīng)該出現(xiàn)在標(biāo)準(zhǔn)項(xiàng)目布局的根包里。入口類一個(gè)模塊入口是任何實(shí)現(xiàn)EntryPoint接口的類,并且可以被無參數(shù)構(gòu)造實(shí)例。當(dāng)裝載一個(gè)模塊時(shí),每個(gè)入口類被實(shí)例化,并且它們的EntryPoint.onModuleLoad()方法被調(diào)用。原代碼路徑模塊能夠指定哪個(gè)子包包含可轉(zhuǎn)換原代碼,方法是把命名包和它的子包被加入原代碼路徑。只有在建立在原代碼路徑上的文件才可能被轉(zhuǎn)換成JAVASCRIPT,客戶端代碼和服務(wù)端代碼也可以無沖突地混合在同一個(gè)類路徑中。當(dāng)模塊繼承其他模塊,它們的原代碼路徑被綁定,這樣每個(gè)模塊將會能夠訪問到它需要的可轉(zhuǎn)換原代碼。公共路徑模塊能夠指定哪個(gè)子包是公共的,方法是命名包和它的子包被加入到公共路徑。當(dāng)你把你的應(yīng)用程序編譯成JAVASCRIPT時(shí),在公共路徑中能找到的所有的文件都被復(fù)制到模塊的輸出目錄。凈效果是用戶可見的URLs不需要包含一個(gè)完整的包名。當(dāng)模塊繼承其他模塊時(shí),它們的公共路徑被綁定,這樣每個(gè)模塊都可以訪問它所需要的靜態(tài)資源。特殊規(guī)范l 模塊XML格式在XML文件中定義模塊,并且置入你的項(xiàng)目包層級。模塊定義在XML文件中,它的文件名擴(kuò)展是.gwt.xml。模塊XML文件應(yīng)當(dāng)位于你的項(xiàng)目的根包如果你正在使用標(biāo)準(zhǔn)項(xiàng)目結(jié)構(gòu),你的模塊XML可以像以下這樣簡單: l 裝載模塊在JAVA類路徑中發(fā)現(xiàn)的模塊XML文件,被它們的邏輯模塊引用,從主頁用名字引入,也被其他模塊引入。模塊總是關(guān)聯(lián)到它們的邏輯名。模塊的邏輯名遵守這種形式pkg1.pkg2.ModuleName且不包括實(shí)際文件系統(tǒng)路徑和文件擴(kuò)展名。例如:模塊XML文件的邏輯名位于:/src/com/example/cal/Calendar.gwt.xml是com.example.cal.Calendarl 可用元素 從指定的模塊繼承所有的設(shè)置,就像被繼承的模塊的XML被逐字復(fù)制。一些模塊可被用這種方式繼承。 指定的入口點(diǎn)類。一些入口類能夠被從被繼承模塊加入、包含。 通過綁定包向原代碼路徑加入包,在包中,模塊XML 可以在特定的子包路徑中找到。任何出現(xiàn)在這個(gè)子包下的JAVA原代碼文件,或任何下層子包內(nèi),假定都是需要被轉(zhuǎn)換的。如果在模塊XML文件中沒有定義這個(gè)元素,客戶(client)子包會被隱含地原代碼路徑,就像模塊XML文件中有定義一樣。這個(gè)默認(rèn)設(shè)置幫助保持模塊XML使用標(biāo)準(zhǔn)項(xiàng)目結(jié)構(gòu)。 通過綁定包向公共路徑中加入包,在綁定包中,模塊XML將會在指定路徑中被發(fā)現(xiàn)來指定 為了RPC測試的方便性,這個(gè)元素裝載一個(gè)SERVLET類,它應(yīng)用到指定的URL路徑。這個(gè)URL路徑應(yīng)該是絕對路徑,并且符合目錄形式(例如:/spellcheck)。你的客戶端代碼指定這個(gè)URL映射到一個(gè)調(diào)用ServiceDefTarget.setServiceEntryPoint(String)。一些SERVLET可以用這種方式裝載,包括那些從繼承模塊里來的。script ready-function body 自動注入外部的JAVASCRIPT文件,這個(gè)文件位于src指定的位置。script ready-function body是一個(gè)JAVASCRIPT函數(shù)體,當(dāng)這個(gè)腳本已知被初始化時(shí),它返回true 自動注入外部的CSS文件, 這個(gè)文件位于src指定的位置。為一個(gè)已存在的客戶屬性值集合進(jìn)行擴(kuò)展。一些值可以用這種方式添加,并且客戶屬性值通過繼承模塊進(jìn)行累積。你可能只是發(fā)現(xiàn)它對于“在國際化中指定本地”(specifying locales in internationalization)有用l 自動資源注入模塊組(Modules)能夠包含到外部JAVASCRIPT和CSS的引用,方法是當(dāng)模塊自身裝載時(shí),它們也被自動裝載。模塊可以包含到外部JAVASCRIPT和CSS文件的引用,方法是當(dāng)模塊自我加載時(shí)自動加載。l 注入外部JAVASCRIPT對于在你的模塊自動地關(guān)聯(lián)外部JAVASCRIPT文件,腳本注入是一個(gè)方便的方法。腳本注入使用下面的語法:“ready-function body”部分是JAVASCRIPT函數(shù)主體部分,當(dāng)腳本被裝載并可用后,它返回true。腳本被裝載進(jìn)主頁(host page)的名字空間(namespace),其作用與你顯式地使用HTML 元素進(jìn)行引入是相同的。例如:假定你的模塊需要的腳本名為 : InjectedScript.js。那么示例代碼如下:function foo() / do something neatdoSomethingTimeConsuming();function bar() / do something else neat你的模塊應(yīng)該如下所示: 可用函數(shù)(ready-function)的目的就是明確地指出腳本已被完全裝載,這樣,你的GWT代碼就能夠使用JSNI,并且可以確定被引用的標(biāo)識符是可用的。在上面的例子中,函數(shù)bar的存在就說明了腳本已經(jīng)就緒了。l 注入外部的樣式表樣式表注入是把外部的CSS文件自動關(guān)聯(lián)到你的模塊的一個(gè)便捷方式。使用如下語法可以把CSS文件自動附加到你的主頁(host page)上。 你能夠用這種方式加入一些樣式表,包含入頁面時(shí)的順序就是元素在你的模塊XML文件中出現(xiàn)的順序。l 注入和模塊繼承模塊繼承使資源注入更加方便。如果你想要創(chuàng)建一個(gè)可重用類庫,這個(gè)庫依賴特定的樣式表的JAVASCRIPT文件,你可以確定你的類庫的客戶可以用從模塊繼承的方式自動得到所需之物。l 過濾公共包在你的公共路徑中濾進(jìn)或?yàn)V出文件,以避免無意地發(fā)布文件。元素不支持完全的FileSet語義。當(dāng)前只有下列屬性和嵌套元素被支持:n includes 屬性 n excludes 屬性n defaultexcludes 屬性 n casesensitive 屬性n 嵌套標(biāo)志includen 嵌套標(biāo)志 exclude 其他屬性和嵌套元素不被支持l 重要注意事項(xiàng)Defaultexcludes的默認(rèn)值是true。二、構(gòu)建用戶界面正如在畫廊(the gallery)中展示的,GWT包含了各種預(yù)先構(gòu)建的JAVA界面元素(widgets)和面板(panels),它們可以為你的應(yīng)用程序提供跨瀏覽器的構(gòu)建塊。GWT用戶界面類是類似于已有的用戶界面框架的,例如Swing 和SWT。除了界面元素(widgets)是用動態(tài)創(chuàng)建HTML的方式進(jìn)行顯示而不是直接面向像素的圖形。當(dāng)需要操作瀏覽器的DOM可以直接使用DOM接口,更方便的方式是使用界面元素的類層級結(jié)構(gòu)。你應(yīng)該很少需要直接訪問DOM。使用界面元素會是更方便快捷構(gòu)建界面,而且在所有的瀏覽器中都能正確工作。 l 特別規(guī)范n 界面元素和面板界面元素和面板是客戶端JAVA類,用于構(gòu)建用戶界面。GWT應(yīng)用程序使用界面元素(widgets)構(gòu)建用戶界面,界面元素包含在面板(panels)內(nèi)。界面元素的例子有:Button, TextBox, 和Tree等。界面元素和面板在所有的瀏覽器中都有同樣的表現(xiàn)。使用它們,你可以避免對每種瀏覽器寫特定的代碼。但是你會受到工具箱所提供的界面元素集合的限制。有若干種方式使你可以創(chuàng)建自定義的界面元素。n 面板面板,諸如DockPanel, HorizontalPanel, 和 RootPanel,包含界面元素,并且用于定義如何在瀏覽器中對界面元素進(jìn)行布局。n 樣式視覺風(fēng)格通過級聯(lián)樣式表(CSS)應(yīng)用到界面元素上。具體做法如下:每個(gè)界面元素都有一個(gè)關(guān)聯(lián)的樣式名,它綁定到對應(yīng)的CSS規(guī)則。一個(gè)界面元素的樣式名使用setStyleName()來設(shè)置。例如:Button元素的默認(rèn)樣式名是gwt-Button。為了給所有的按鈕一個(gè)更大的字體,你可以把下列規(guī)則加入到你的應(yīng)用程序CSS文件中。.gwt-Button font-size: 150%; l 復(fù)雜樣式一些界面元素有稍微復(fù)雜的樣式。例如:MenuBar,有下列樣式: .gwt-MenuBar the menu bar itself .gwt-MenuBar .gwt-MenuItem menu items .gwt-MenuBar .gwt-MenuItem-selected selected menu items 在這個(gè)例子中,有兩個(gè)樣式規(guī)則應(yīng)用到菜單項(xiàng)目。第一個(gè)應(yīng)用到所有的菜單項(xiàng)(已選中和未選中的),同時(shí),第二個(gè)(有-selected后綴)應(yīng)用到已經(jīng)選中的菜單項(xiàng)。一個(gè)選中的菜單項(xiàng)的樣式名字會設(shè)置成gwt-MenuItem gwt-MenuItem-selected,指定這兩種被應(yīng)用的樣式規(guī)則。最通常的方式是使用setStyleName來設(shè)置基本樣式名,然后用addStyleName()和removeStyleName()來添加和去除第二個(gè)樣式名。l CSS文件 通常,樣式表被置于你的模塊的公共路徑下的包里。然后簡單地在你的主頁中包含它,如下: n 界面元素畫廊一個(gè)界面元素和面板的展示區(qū)下列界面元素和面板都可以GWT用戶界面庫中找到。l 按鈕(Button)示例代碼:public class ButtonExample implements EntryPoint public void onModuleLoad() / Make a new button that does something when you click it.Button b = new Button(Jump!, new ClickListener() public void onClick(Widget sender) Window.alert(How high?); ); / Add it to the root panel.RootPanel.get().add(b); l 單選按鈕(RadioButton)示例代碼:public class RadioButtonExample implements EntryPoint public void onModuleLoad() / Make some radio buttons, all in one group. RadioButton rb0 = new RadioButton(myRadioGroup, foo); RadioButton rb1 = new RadioButton(myRadioGroup, bar); RadioButton rb2 = new RadioButton(myRadioGroup, baz); / Check baz by default. rb2.setChecked(true); / Add them to the root panel. FlowPanel panel = new FlowPanel(); panel.add(rb0); panel.add(rb1); panel.add(rb2); RootPanel.get().add(panel); l 復(fù)選框(CheckBox)示例代碼:public class CheckBoxExample implements EntryPoint public void onModuleLoad() / Make a new check box, and select it by default. CheckBox cb = new CheckBox(Foo); cb.setChecked(true); / Hook up a listener to find out when its clicked. cb.addClickListener(new ClickListener() public void onClick(Widget sender) boolean checked = (CheckBox) sender).isChecked(); Window.alert(It is + (checked ? :not) + checked); ); / Add it to the root panel. RootPanel.get().add(cb); l 文本框(TextBox)代碼示例:public class TextBoxExample implements EntryPoint public void onModuleLoad() / Make some text boxes. The password text box is identical to the text / box, except that the input is visually masked by the browser. PasswordTextBox ptb = new PasswordTextBox(); TextBox tb = new TextBox(); / Lets disallow non-numeric entry in the normal text box. tb.addKeyboardListener(new KeyboardListenerAdapter() public void onKeyPress(Widget sender, char keyCode, int modifiers) if (!Character.isDigit(keyCode) / TextBox.cancelKey() suppresses the current keyboard event. (TextBox)sender).cancelKey(); ); / Lets make an 80x50 text area to go along with the other two. TextArea ta = new TextArea(); ta.setCharacterWidth(80); ta.setVisibleLines(50); / Add them to the root panel. VerticalPanel panel = new VerticalPanel(); panel.add(tb); panel.add(ptb); panel.add(ta); RootPanel.get().add(panel); l 密碼框(PasswordTextBox)示例代碼:public class TextBoxExample implements EntryPoint public void onModuleLoad() / Make some text boxes. The password text box is identical to the text / box, except that the input is visually masked by the browser. PasswordTextBox ptb = new PasswordTextBox(); TextBox tb = new TextBox(); / Lets disallow non-numeric entry in the normal text box. tb.addKeyboardListener(new KeyboardListenerAdapter() public void onKeyPress(Widget sender, char keyCode, int modifiers) if (!Character.isDigit(keyCode) / TextBox.cancelKey() suppresses the current keyboard event. (TextBox)sender).cancelKey(); ); / Lets make an 80x50 text area to go along with the other two. TextArea ta = new TextArea(); ta.setCharacterWidth(80); ta.setVisibleLines(50); / Add them to the root panel. VerticalPanel panel = new VerticalPanel(); panel.add(tb); panel.add(ptb); panel.add(ta); RootPanel.get().add(panel); l 文本區(qū)(TextArea)示例代碼:public class TextBoxExample implements EntryPoint public void onModuleLoad() / Make some text boxes. The password text box is identical to the text / box, except that the input is visually masked by the browser. PasswordTextBox ptb = new PasswordTextBox(); TextBox tb = new TextBox(); / Lets disallow non-numeric entry in the normal text box. tb.addKeyboardListener(new KeyboardListenerAdapter() public void onKeyPress(Widget sender, char keyCode, int modifiers) if (!Character.isDigit(keyCode) /TextBox.cancelKey() suppresses the current keyboard event. (TextBox)sender).cancelKey(); ); / Lets make an 80x50 text area to go along with the other two. TextArea ta = new TextArea(); ta.setCharacterWidth(80); ta.setVisibleLines(50); / Add them to the root panel. VerticalPanel panel = new VerticalPanel(); panel.add(tb); panel.add(ptb); panel.add(ta);RootPanel.get().add(panel); l 超級鏈接(Hyperlink)示例代碼:public class HistoryExample implements EntryPoint, HistoryListener private Label lbl = new Label(); public void onModuleLoad() / Create three hyperlinks that change the applications history. Hyperlink link0 = new Hyperlink(link to foo, foo); Hyperlink link1 = new Hyperlink(link to bar, bar); Hyperlink link2 = new Hyperlink(link to baz, baz); / If the application starts with no history token, start it off in the / baz state. String initToken = History.getToken(); if (initToken.length() = 0) initToken = baz; / onHistoryChanged() is not called when the application first runs. Call / it now in order to reflect the initial state. onHistoryChanged(initToken); / Add widgets to the root panel. VerticalPanel panel = new VerticalPanel(); panel.add(lbl); panel.add(link0); panel.add(link1); panel.add(link2); RootPanel.get().add(panel); / Add history listener History.addHistoryListener(this); public void onHistoryChanged(String historyToken) / This method is called whenever the applications history changes. Set / the label to reflect the current history token. lbl.setText(The current history token is: + historyToken); l 列表框(ListBox)示例代碼:public class ListBoxExample implements EntryPoint public void onModuleLoad() / Make a new list box, adding a few items to it. ListBox lb = new ListBox(); lb.addItem(foo); lb.addItem(bar); lb.addItem(baz); lb.addItem(toto); lb.addItem(tintin); / Make enough room for all five items (setting this value to 1 turns it / into a drop-down list). lb.setVisibleItemCount(5); / Add it to the root panel.RootPanel.get().add(lb); l 菜單條(MenuBar)示例代碼:public class MenuBarExample implements EntryPoint public void onModuleLoad() / Make a command that we will execute from all leaves. Command cmd = new Command() public void execute() Window.alert(You selected a menu item!); ; / Make some sub-menus that we will cascade from the top menu. MenuBar fooMenu = new MenuBar(true); fooMenu.addItem(the, cmd); fooMenu.addItem(foo, cmd); fooMenu.addI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- app銷售合同范例
- 佛山聯(lián)合測繪合同范例
- 個(gè)人廚師入股合同范例
- 價(jià)格磋商合同范例
- 與店家合作合同樣本
- 個(gè)人承諾合同范例
- 萬州區(qū)土地承包合同范例
- 全款買房房屋合同范例
- 財(cái)務(wù)報(bào)表基礎(chǔ)培訓(xùn)
- 戰(zhàn)略視角下的智慧交通優(yōu)化方案試題及答案
- 滬科版七年級數(shù)學(xué)下冊第八章測試題及答案
- 2024年全國中學(xué)生數(shù)學(xué)奧林匹克競賽內(nèi)蒙古賽區(qū)初賽試卷(解析版)
- AQ/T 9009-2015 生產(chǎn)安全事故應(yīng)急演練評估規(guī)范(正式版)
- 燒烤類菜單表格
- CNC機(jī)加工作業(yè)指導(dǎo)書
- 幼兒園繪本:《小蛇散步》 課件
- 博德之門BG+TOSC細(xì)節(jié)攻略
- 正畸沙龍專用宣教PPT-口腔正畸正當(dāng)時(shí)
- 計(jì)算機(jī)網(wǎng)絡(luò)故障的診斷與解決方法論文
- 阿帕套裝汽車改燈燈光升級ppt課件
- 年產(chǎn)12.5萬噸鹽酸工程二段吸收工序工藝設(shè)計(jì)
評論
0/150
提交評論