Java 學(xué)習(xí)

          堅(jiān)持不懈,打通-->軟件—控制—機(jī)械
          posts - 5, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2006年7月3日

          上一篇詳細(xì)介紹了一個(gè)SWT實(shí)例,這一篇接下來(lái)介紹SWT組件的生命周期
          本文地址:
          http://www.aygfsteel.com/cpenet/archive/2006/07/04/56539.html

          本篇譯自《 Eclipse.Building.Commercial.Quality.Plug.ins.2nd.Edition 》第四章第二節(jié),希望對(duì)入門(mén)者有所幫助。

          ?

          組件的生命周期

          設(shè)計(jì) SWT 的一個(gè)目標(biāo)就是小而靈巧。為了達(dá)到這個(gè)目標(biāo),一個(gè)基本的設(shè)計(jì)策略,就是盡可能的使組件的狀態(tài)存儲(chǔ)在平臺(tái)組件中而不是存儲(chǔ)在 SWT 組件中 ( 這句話,我不理解,也翻譯的不明白,附原文: To achieve this, a basic design decision was made that as much widget state as possible would be stored in the platform widget rather than in the SWT widget.) 。這與 Swing 形成顯著的對(duì)比, Swing Swing 組件中維護(hù)了所有的組件狀態(tài)。 ( 可能是這樣: SWT 把各個(gè)組件的狀態(tài)交給系統(tǒng)平臺(tái)來(lái)管理,而 Swing 自己管理各個(gè) Swing 組件的狀態(tài),這樣 Swing 就復(fù)雜,耗費(fèi)的資源,內(nèi)存的需求也多,不知道是不是 J ) 。通過(guò)不把系統(tǒng)平臺(tái)級(jí)別的組件信息復(fù)制過(guò)來(lái)自己維護(hù), SWT 就非常的小巧而且對(duì)內(nèi)存的需求也相應(yīng)少。

          達(dá)到這個(gè)目的所付出的代價(jià)就是 SWT 的組件不能夠自己獨(dú)立存在。當(dāng)一個(gè) SWT 組件被創(chuàng)建時(shí),同時(shí)立即在系統(tǒng)平臺(tái)下也創(chuàng)建了該組件的對(duì)應(yīng)體。接下來(lái),幾乎所有對(duì)該組件的信息狀態(tài)請(qǐng)求都會(huì)由平臺(tái)來(lái)處理。

          大部分的系統(tǒng)平臺(tái)在創(chuàng)建一個(gè)組件時(shí),需要該組件明確的父組件的上下文,所以 SWT 需要一個(gè)父組件來(lái)最為它的構(gòu)造聲明。許多平臺(tái)在創(chuàng)建組件時(shí)還需要該組件的特定風(fēng)格參數(shù)的設(shè)定。例如:按鈕有復(fù)選框,單選框,簡(jiǎn)單按鈕和文本域有單行和多行之分。

          SWT 類(lèi)中,風(fēng)格位段用整數(shù)類(lèi)型來(lái)定義且不會(huì)更改。風(fēng)格參數(shù)被組織在一起,其它各種構(gòu)造器傳遞著這些參數(shù)來(lái)創(chuàng)建一個(gè)組件的初始風(fēng)格。注意到,所有的平臺(tái)并不支持所有的風(fēng)格,所以在很多情況下,被請(qǐng)求的風(fēng)格被認(rèn)為是一種提示,它或許會(huì)或許不會(huì)對(duì)一個(gè)特殊的平臺(tái)產(chǎn)生影響。

          當(dāng) SWT 組件不在需要時(shí),一些平臺(tái)要求作出明確的釋放。對(duì)于組件本身和一些資源 ( 例如:圖形,字體,顏色 ) 而言,他們已經(jīng)具備了系統(tǒng)的這個(gè)要求。基本的規(guī)則是:如果你創(chuàng)建了一個(gè)組件,就要使用 dispose() 方法來(lái)撤銷(xiāo)這個(gè)組件。如果你使用了一些系統(tǒng)資源,例如系統(tǒng)顏色,你就不需要釋放他們。

          幸運(yùn)的,當(dāng)一個(gè)組件被釋放的,它的所有子組件會(huì)自動(dòng)地被釋放。這意味著,如果你釋放了一個(gè) shell ,那么所有 shell 包含的組件都會(huì)被自動(dòng)釋放。

          posted @ 2006-07-04 14:52 燕然 閱讀(995) | 評(píng)論 (1)編輯 收藏

          本文譯自《 Eclipse.Building.Commercial.Quality.Plug.ins.2nd.Edition 》第四章第二節(jié),詳細(xì)解釋了 SWT 程序的語(yǔ)句,希望對(duì)入門(mén)者有所幫助。

          ? 本文地址:http://www.aygfsteel.com/cpenet/archive/2006/07/03/56407.html

          讓我們從簡(jiǎn)單的 HelloWorld 應(yīng)用程序開(kāi)始。

          ?一、SWT添加到工程的類(lèi)路徑中

          首先建立一個(gè)java工程。在開(kāi)始使用SWT之前,需要將SWT庫(kù)文件添加到工程的類(lèi)路徑中。步驟如下:

          1.??? 下載SWT。在Eclipse SDK的下載頁(yè)面中,提供了獨(dú)立版本的SWT下載。找到標(biāo)有SWT Binary and Source的欄目。下載適合你操作系統(tǒng)的版本,不用解壓,直接保存到硬盤(pán)中。

          2.??? Eclipse菜單欄,選擇File-Import...打開(kāi)導(dǎo)入向?qū)?

          3.??? 選擇Existing Projects into Workspace,點(diǎn)擊Next按鈕

          4.??? 選擇 Select archive file并使用 Browse...按鈕來(lái)找到你剛才下載的SWT文件。

          ?5.??? 點(diǎn)擊Finish按鈕,完成SWT導(dǎo)入。

          ?6.??? 右鍵點(diǎn)擊你建立的工程,選擇Properties 來(lái)打開(kāi)Properties對(duì)話框。

          ?7.??? 選擇 Java Build Path -> Projects tab并點(diǎn)擊Add按鈕.

          ?8.??? 選擇 org.eclipse.swt工程, 點(diǎn)擊 OK,完成添加SWT庫(kù)到你的工程中(見(jiàn)圖1).

          {26F7CFAE-1A69-42BA-A826-4576DB987FD5}.BMP?

          ????????????????????????????? 1

          二、 SWT 代碼

          現(xiàn)在在你建立的java工程中,新建一個(gè)java文件,取名為 HelloWorld。在HelloWorld.java文件中把main()方法覆蓋為以下代碼:??

          1 ??? public ? static ? void ?main(String[]?args)?{
          2 ??????Display?display? = ? new
          ?Display();
          3 ??????Shell?shell? = ? new
          ?Shell(display);
          4 ??????shell.setText( " Hello?World "
          );
          5 ??????shell.setBounds( 100 ,? 100 ,? 200 ,? 50
          );
          6 ??????shell.setLayout( new
          ?FillLayout());
          7 ??????Label?label? = ? new
          ?Label(shell,?SWT.CENTER);
          8 ??????label.setText( " Hello?World "
          );
          9 ??????Color?red? = ? new ?Color(display,? 255 ,? 0 ,? 0
          );
          10
          ?????label.setForeground(red);
          11
          ?????shell.open();
          12 ????? while ?( !
          shell.isDisposed())?{
          13 ???????? if ?( !
          display.readAndDispatch())?display.sleep();
          14
          ?????}
          15
          ?????red.dispose();
          16
          ?????display.dispose();
          17
          ??}

          注:

          在覆蓋了上述代碼后, 選擇菜單欄中的 Source -> Organize Imports命令 (或者按Ctrl+Shift+O) 來(lái)把需要引用的SWT包導(dǎo)入到HelloWorld.java文件中

          以下是對(duì)各行代碼的詳細(xì)解釋?zhuān)?span lang="EN-US">

          2行:每個(gè)基于SWT的應(yīng)用程序都有一個(gè)Display類(lèi)的實(shí)例。用來(lái)將低層平臺(tái)和SWT進(jìn)行鏈接。除了管理SWT的事件循環(huán),還能訪問(wèn)SWT需要的平臺(tái)資源。在16行,display實(shí)例將會(huì)提交給垃圾收集器。

          3行:每一個(gè)窗口都有一個(gè)Shell窗口框架,來(lái)與用戶進(jìn)行交互。Shell像所有的windows系統(tǒng)一樣來(lái)處理動(dòng)作行為,并作為窗口控件的放置場(chǎng)所。

          4行: setText()方法設(shè)置窗口的標(biāo)題.

          5行: setBounds() 方法設(shè)置窗口的大小和放置的位置. 在這個(gè)例子中, 設(shè)置窗口為200個(gè)像素寬,50個(gè)像素高,并放在離屏幕的左上角100x100像素的位置上。

          6行: setLayout()方法 設(shè)置窗口框架的布局. FillLayout,充滿式布局管理器,使得組件大小會(huì)盡量的充滿整個(gè)容器.SWT的布局管理器會(huì)在以后詳細(xì)介紹。

          7行:在shell上新建一個(gè)簡(jiǎn)單的label組件并居中顯示label的文本內(nèi)容。

          8行: setText() 方法 設(shè)置label的文本內(nèi)容。

          9行:創(chuàng)建一個(gè)紅色的顏色類(lèi)的實(shí)例。你也可以使用以下語(yǔ)句獲得系統(tǒng)紅色的實(shí)例:

          Color red = display.getSystemColor(SWT.COLOR_RED);

          10行: setForeground() 方法 ?設(shè)置label的前景色

          11行:到目前為止,窗口框架還是不可見(jiàn)的。通過(guò)open()方法使得窗口可見(jiàn)。

          12行: while語(yǔ)句循環(huán)檢測(cè)窗口有沒(méi)有關(guān)閉。

          13行:display 控制事件的循環(huán). readAndDispatch() 方法從平臺(tái)的事件隊(duì)列中讀取事件,并分配他們到合適的處理程序(接收者)。只要隊(duì)列中一直有事件可以處理,這個(gè)方法一直返回true,當(dāng)事件隊(duì)列為空時(shí),則返回false(因此允許用戶界面UI線程出于sleep狀態(tài)直到事件隊(duì)列不為空)。

          15,16行:當(dāng)循環(huán)檢測(cè)到窗口被關(guān)閉時(shí),需要將colordisplay和一些相關(guān)聯(lián)的平臺(tái)資源釋放。注意到系統(tǒng)顏色實(shí)例(colors)將會(huì)被提交釋放。

          二、??????????? 運(yùn)行這個(gè)例子

          通常情況下,為了啟動(dòng)一個(gè)java應(yīng)用程序,會(huì)使用Run As - Java Application 命令。在這里,如此運(yùn)行將會(huì)拋出 UnsatisfiedLinkError 異常,說(shuō)明沒(méi)有找到 SWT 的本地庫(kù)。如果運(yùn)行 Run As > SWT Application 命令,將會(huì)彈出 SWT 啟動(dòng)配置窗口,見(jiàn)圖 2 ,在圖 2 中可以點(diǎn)擊 run 按鈕。

          ?{3717602A-4D02-4E2D-A913-A6BC4E1289A8}.BMP

          ??????????????????????????????? 2

          點(diǎn)擊 run ,運(yùn)行結(jié)果圖 3

          ?{978DFCF8-658E-40EC-80D4-3DD5D8FACF1F}.BMP

          ????????? 3

          (以后繼續(xù))

          posted @ 2006-07-03 20:09 燕然 閱讀(800) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 二连浩特市| 南涧| 阳原县| 固原市| 济宁市| 临城县| 兴宁市| 襄垣县| 定兴县| 平陆县| 杨浦区| 云浮市| 鄱阳县| 百色市| 宁乡县| 屯昌县| 三门峡市| 九江县| 凉城县| 灵武市| 阿坝县| 黎川县| 元氏县| 凯里市| 汤原县| 平凉市| 金门县| 攀枝花市| 色达县| 海淀区| 无为县| 大冶市| 马山县| 山丹县| 峨边| 英吉沙县| 台中市| 贺兰县| 巧家县| 遵义县| 陆川县|