Java 學習

          堅持不懈,打通-->軟件—控制—機械
          posts - 5, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2006年7月3日

          上一篇詳細介紹了一個SWT實例,這一篇接下來介紹SWT組件的生命周期
          本文地址:http://www.aygfsteel.com/cpenet/archive/2006/07/04/56539.html

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

          ?

          組件的生命周期

          設計 SWT 的一個目標就是小而靈巧。為了達到這個目標,一個基本的設計策略,就是盡可能的使組件的狀態存儲在平臺組件中而不是存儲在 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 形成顯著的對比, Swing Swing 組件中維護了所有的組件狀態。 ( 可能是這樣: SWT 把各個組件的狀態交給系統平臺來管理,而 Swing 自己管理各個 Swing 組件的狀態,這樣 Swing 就復雜,耗費的資源,內存的需求也多,不知道是不是 J ) 。通過不把系統平臺級別的組件信息復制過來自己維護, SWT 就非常的小巧而且對內存的需求也相應少。

          達到這個目的所付出的代價就是 SWT 的組件不能夠自己獨立存在。當一個 SWT 組件被創建時,同時立即在系統平臺下也創建了該組件的對應體。接下來,幾乎所有對該組件的信息狀態請求都會由平臺來處理。

          大部分的系統平臺在創建一個組件時,需要該組件明確的父組件的上下文,所以 SWT 需要一個父組件來最為它的構造聲明。許多平臺在創建組件時還需要該組件的特定風格參數的設定。例如:按鈕有復選框,單選框,簡單按鈕和文本域有單行和多行之分。

          SWT 類中,風格位段用整數類型來定義且不會更改。風格參數被組織在一起,其它各種構造器傳遞著這些參數來創建一個組件的初始風格。注意到,所有的平臺并不支持所有的風格,所以在很多情況下,被請求的風格被認為是一種提示,它或許會或許不會對一個特殊的平臺產生影響。

          SWT 組件不在需要時,一些平臺要求作出明確的釋放。對于組件本身和一些資源 ( 例如:圖形,字體,顏色 ) 而言,他們已經具備了系統的這個要求。基本的規則是:如果你創建了一個組件,就要使用 dispose() 方法來撤銷這個組件。如果你使用了一些系統資源,例如系統顏色,你就不需要釋放他們。

          幸運的,當一個組件被釋放的,它的所有子組件會自動地被釋放。這意味著,如果你釋放了一個 shell ,那么所有 shell 包含的組件都會被自動釋放。

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

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

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

          讓我們從簡單的 HelloWorld 應用程序開始。

          ?一、SWT添加到工程的類路徑中

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

          1.??? 下載SWT。在Eclipse SDK的下載頁面中,提供了獨立版本的SWT下載。找到標有SWT Binary and Source的欄目。下載適合你操作系統的版本,不用解壓,直接保存到硬盤中。

          2.??? Eclipse菜單欄,選擇File-Import...打開導入向導

          3.??? 選擇Existing Projects into Workspace,點擊Next按鈕

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

          ?5.??? 點擊Finish按鈕,完成SWT導入。

          ?6.??? 右鍵點擊你建立的工程,選擇Properties 來打開Properties對話框。

          ?7.??? 選擇 Java Build Path -> Projects tab并點擊Add按鈕.

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

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

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

          二、 SWT 代碼

          現在在你建立的java工程中,新建一個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) 來把需要引用的SWT包導入到HelloWorld.java文件中

          以下是對各行代碼的詳細解釋:

          2行:每個基于SWT的應用程序都有一個Display類的實例。用來將低層平臺和SWT進行鏈接。除了管理SWT的事件循環,還能訪問SWT需要的平臺資源。在16行,display實例將會提交給垃圾收集器。

          3行:每一個窗口都有一個Shell窗口框架,來與用戶進行交互。Shell像所有的windows系統一樣來處理動作行為,并作為窗口控件的放置場所。

          4行: setText()方法設置窗口的標題.

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

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

          7行:在shell上新建一個簡單的label組件并居中顯示label的文本內容。

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

          9行:創建一個紅色的顏色類的實例。你也可以使用以下語句獲得系統紅色的實例:

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

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

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

          12行: while語句循環檢測窗口有沒有關閉。

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

          15,16行:當循環檢測到窗口被關閉時,需要將colordisplay和一些相關聯的平臺資源釋放。注意到系統顏色實例(colors)將會被提交釋放。

          二、??????????? 運行這個例子

          通常情況下,為了啟動一個java應用程序,會使用Run As - Java Application 命令。在這里,如此運行將會拋出 UnsatisfiedLinkError 異常,說明沒有找到 SWT 的本地庫。如果運行 Run As > SWT Application 命令,將會彈出 SWT 啟動配置窗口,見圖 2 ,在圖 2 中可以點擊 run 按鈕。

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

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

          點擊 run ,運行結果圖 3 。

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

          ????????? 3

          (以后繼續)

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

          主站蜘蛛池模板: 来凤县| 长宁区| 古田县| 黔西| 江都市| 闸北区| 来安县| 建宁县| 苍南县| 洞头县| 桂平市| 江城| 宜章县| 曲水县| 鹤岗市| 遂宁市| 盖州市| 枣强县| 上栗县| 望谟县| 彰化县| 钟祥市| 南木林县| 佳木斯市| 东城区| 大连市| 五大连池市| 星子县| 新昌县| 谷城县| 上栗县| 绥化市| 潍坊市| 雷波县| 湘潭市| 岳西县| 漾濞| 常宁市| 永修县| 鹿泉市| 玛曲县|