幻境
          We are extremely fortunate not to know precisely the kind of world we live in
          posts - 22,comments - 39,trackbacks - 0

          Hello, world!開始了解DisplayShell

          在這一節中,我們從前面所列舉出來的Hello, world!程序開始對swt進行一些初步的探索。所謂的初步是指,我們會介紹編寫swt程序的基本思路,以及對兩個重要的類:DisplayShell作一些介紹。

          因為這一節和前一節是分成兩個部分貼出來的,所以我仍然將Hello, world!的代碼段在下面列出來:

           1package swtjfacesample;
           2
           3import org.eclipse.swt.SWT;
           4import org.eclipse.swt.widgets.Display;
           5import org.eclipse.swt.widgets.Shell;
           6import org.eclipse.swt.widgets.Text;
           7
           8public class HelloSwt {
           9    /**
          10     * Hello,world!
          11     * 
          12     * @param args
          13     */

          14       public static void main(String[] args) {
          15        Display display = new Display();
          16        Shell shell = new Shell(display);
          17        
          18        Text helloText = new Text(shell, SWT.CENTER);
          19        helloText.setText("Hello,World!");
          20        helloText.pack();
          21        
          22        shell.pack();
          23        shell.open();
          24
          25        while (!shell.isDisposed()) {
          26            if (!display.readAndDispatch()) {
          27                display.sleep();
          28            }

          29        }

          30        display.dispose();
          31
          32    }

          33}


          代碼段 2

          這段程序雖然很簡單,但是它反映了我們書寫swt程序的步驟,這些步驟是:

          1.      創建一個Display對象

          2.      創建一個或者多個Shell對象,你可以認為Shell代表了程序的窗口。

          3.      Shell內創建各種部件(widget

          4.      對各個部件進行初始化(外觀,狀態等),同時為各種部件的事件創建監聽器(listener

          5.      調用Shell對象的open()方法以顯示窗體

          6.      各種事件進行監聽并處理,直到程序發出退出消息

          7.      調用Display對象的dispose()方法以結束程序。

           

          Hello,world!程序中,為了讓程序更加簡單,我們沒有創建事件監聽器,在以后的內容中會進行專門介紹。

          現在讓我們稍微深入一些,看一下這些Display,Shell有什么作用以至于我們每個程序都必須有它們存在。

          Display:與操作系統溝通的橋梁

          我們在前面說過,每個swt程序在最開始都必須創建一個Display對象。Display對象起什么作用呢?它是swt與操作系統溝通的一座橋梁。它負責swt和操作系統之間的通信。它將swt/JFace的各種調用轉化為系統的底層調用,控制操作系統為swt分配的資源。同時我們也可以通過Display對象得到操作系統的一些信息。

          Display是一個幕后工作者,它為swt/JFace提供支持,但是你并不能夠從某個用戶界面中看到它的影子。

          在前面的Hello,world!程序中,我們可以看到構建一個Display對象是和普通的Java對象一樣通過構造函數實現的。它為實現圖形界面準備了最基本的條件。而在程序結束時我們必須顯式地調用dispose() 方法來釋放程序運行中所獲得的資源。一般來說,一個程序只需要一個Display對象,當然沒有人禁止你創建多個Display對象。但是在swtjavadoc中,我們可以看到關于這個問題一些描述:

          “Applications which are built with SWT will almost always require only a single display. In particular, some platforms which SWT supports will not allow more than one active display. In other words, some platforms do not support creating a new display if one already exists that has not been sent the dispose() message.”

          Display有著眾多的方法,我們不可能一一介紹。在這里只挑選幾個可能會比較常用的作一些簡單介紹。

          l         setData()getData():這一對函數允許我們為Display對象設定一些數據,setData()的參數中keyvalue類似于我們在使用Map對象中keyvalue的含義。

          l         getShells()得到關聯到該Display對象的所有沒有disposeShell對象

          l         getCurrent()得到與用戶交互的當前線程

          l         readAndDispatch()得到事件并且調用對應的監聽器進行處理

          l         sleep()等待事件發生

          Shell:窗口

          一個Shell對象就是一個窗口。你可以在上面放置各種部件創建豐富的圖形界面。

          我們都知道窗口有很多種,比如窗口有可以調整大小的,有不可以的,有的沒有最大化最小化按鈕。這些窗體的特征在swt中被成為風格(style)。一個窗體的風格可以用一個整數進行定義。這些風格的定義在org.eclipse.swt.SWT中。

          Shell對象可用的風格包括:BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE , PLICATION_MODAL, MODELESS, PRIMARY_MODAL,S YSTEM_MODAL

          這些風格我們不作一一介紹,你可以從他們字面意義看出一些含義來,當然也可以參考對應的javadoc

          我們可以在一個Shell的構造函數中定義它的風格,比如在前面的Hello,world!程序中,我們可以這樣定義Shell

           

          Shell shell = new Shell(display,SWT.CLOSE | SWT.SYSTEM_MODAL);

           

          最后得到的窗體沒有最大化和最小化按鈕,并且大小是固定不變的。

          因為swt運行于各種平臺之上,而這些平臺上的窗口管理器千差萬別,所以所有這些風格都不是肯定可以實現的。在swtjavadoc中,這被稱為暗示(hints)。

          Shell對象的方法大都和GUI有關,比如setEnabled()設定了窗體是否能夠和用戶進行交互,setVisble()設定了窗體是否可見,setActive()將窗體設為當前的活動窗口。

          我們可以用open()方法打開一個窗體,close()方法關閉一個窗體。

          小結

          本節討論了DisplayShell的一些概念,這是我們以后進一步了解swt的基礎。在下一節中,我將介紹各種部件(widget)的用法,所謂部件,是指文本框,標簽等UI實體。

          posted on 2005-05-18 10:35 閱讀(5155) 評論(4)  編輯  收藏 所屬分類: 編程相關

          FeedBack:
          # re: SWT/Jface開發入門指南(二)
          2005-11-03 22:29 | 秦焜
          寫的不錯,支持  回復  更多評論
            
          # re: SWT/Jface開發入門指南(二)
          2005-11-30 11:52 | 編程浪子
          比較容易懂,不錯!  回復  更多評論
            
          # re: SWT/Jface開發入門指南(二)
          2006-03-08 12:07 | 《》<b>b</b>
          《》<b>b</b>  回復  更多評論
            
          # re: SWT/Jface開發入門指南(二)
          2006-07-31 13:54 | 不要問我是誰?
          JFace庫不會直接與本地窗口系統打交道,他采用SWT中的類,實現復雜的GUI
          元素,只是SWT的擴展包,SWT采用了JNI來實現,對本地窗口系統函數的調用,JFace組件繼承的本地組件的感觀效果。
            回復  更多評論
            
          主站蜘蛛池模板: 锡林浩特市| 上思县| 柳河县| 固始县| 甘泉县| 唐海县| 临颍县| 兰考县| 祁门县| 昭通市| 天气| 涿州市| 贡嘎县| 台山市| 岱山县| 金华市| 秦安县| 莱阳市| 南开区| 全南县| 霍城县| 昌图县| 湖南省| 饶阳县| 亳州市| 镇远县| 桓仁| 黄骅市| 姜堰市| 神农架林区| 精河县| 白山市| 平陆县| 平定县| 澎湖县| 日土县| 仙桃市| 萝北县| 大城县| 施秉县| 安阳县|