<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    幻境
    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 閱讀(5162) 評論(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組件繼承的本地組件的感觀效果。
      回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产理论片在线播放| 18gay台湾男同亚洲男同| 亚洲色无码国产精品网站可下载| 国内精品久久久久影院亚洲| 97在线视频免费| 亚洲av日韩av天堂影片精品| 亚洲欧美黑人猛交群| 午夜免费不卡毛片完整版| 国产国拍亚洲精品mv在线观看| 国产福利在线观看永久免费| 亚色九九九全国免费视频| 亚洲人成在线精品| 成年女人看片免费视频播放器| 国产亚洲A∨片在线观看| 久久久国产精品福利免费| 久久国产亚洲观看| 日本免费人成在线网站| 亚洲日韩精品无码专区网站| 国产精品高清视亚洲精品| 欧美a级在线现免费观看| 国产v亚洲v天堂无码网站| 国产白丝无码免费视频| 亚洲黄色免费网址| 扒开双腿猛进入爽爽免费视频| 亚洲国产精品嫩草影院| 亚洲裸男gv网站| a在线观看免费网址大全| 91精品国产亚洲爽啪在线观看| 中文字幕人成无码免费视频| 亚洲av乱码一区二区三区按摩| 国产AV无码专区亚洲AV漫画| 国产精品手机在线亚洲| 免费观看美女裸体网站| 一级特黄a大片免费| 伊人久久综在合线亚洲2019| 无码人妻一区二区三区免费| 五月天国产成人AV免费观看| 亚洲成人在线网站| 日本一区免费电影| 人人揉揉香蕉大免费不卡| 亚洲成a人片在线不卡一二三区|