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

          Hello, world!開始了解DisplayShell

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

          因為這一節(jié)和前一節(jié)是分成兩個部分貼出來的,所以我仍然將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.      創(chuàng)建一個Display對象

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

          3.      Shell內(nèi)創(chuàng)建各種部件(widget

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

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

          6.      各種事件進行監(jiān)聽并處理,直到程序發(fā)出退出消息

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

           

          Hello,world!程序中,為了讓程序更加簡單,我們沒有創(chuàng)建事件監(jiān)聽器,在以后的內(nèi)容中會進行專門介紹。

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

          Display:與操作系統(tǒng)溝通的橋梁

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

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

          在前面的Hello,world!程序中,我們可以看到構建一個Display對象是和普通的Java對象一樣通過構造函數(shù)實現(xiàn)的。它為實現(xiàn)圖形界面準備了最基本的條件。而在程序結束時我們必須顯式地調(diào)用dispose() 方法來釋放程序運行中所獲得的資源。一般來說,一個程序只需要一個Display對象,當然沒有人禁止你創(chuàng)建多個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():這一對函數(shù)允許我們?yōu)?/SPAN>Display對象設定一些數(shù)據(jù),setData()的參數(shù)中keyvalue類似于我們在使用Map對象中keyvalue的含義。

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

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

          l         readAndDispatch()得到事件并且調(diào)用對應的監(jiān)聽器進行處理

          l         sleep()等待事件發(fā)生

          Shell:窗口

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

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

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

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

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

           

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

           

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

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

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

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

          小結

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

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

          FeedBack:
          # re: SWT/Jface開發(fā)入門指南(二)
          2005-11-03 22:29 | 秦焜
          寫的不錯,支持  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(二)
          2005-11-30 11:52 | 編程浪子
          比較容易懂,不錯!  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(二)
          2006-03-08 12:07 | 《》<b>b</b>
          《》<b>b</b>  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(二)
          2006-07-31 13:54 | 不要問我是誰?
          JFace庫不會直接與本地窗口系統(tǒng)打交道,他采用SWT中的類,實現(xiàn)復雜的GUI
          元素,只是SWT的擴展包,SWT采用了JNI來實現(xiàn),對本地窗口系統(tǒng)函數(shù)的調(diào)用,JFace組件繼承的本地組件的感觀效果。
            回復  更多評論
            
          主站蜘蛛池模板: 枞阳县| 航空| 双柏县| 文山县| 教育| 延寿县| 龙岩市| 昔阳县| 勃利县| 嘉义县| 襄垣县| 汉中市| 武宁县| 靖江市| 彩票| 惠水县| 富锦市| 盐亭县| 宜丰县| 于田县| 崇明县| 恩平市| 文成县| 玉门市| 竹溪县| 富蕴县| 农安县| 磐安县| 萍乡市| 兴山县| 宜阳县| 济源市| 西林县| 上林县| 井冈山市| 安溪县| 天津市| 康定县| 昌邑市| 积石山| 汉源县|