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

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

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

    The Spark of Thinking

    Focus on Eclipse Tools.

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評論 :: 0 Trackbacks

    Hello, world! 開始了解 Display Shell

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

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

    ?1 package?swtjfacesample;
    ?2
    ?3 import?org.eclipse.swt.SWT;
    ?4 import?org.eclipse.swt.widgets.Display;
    ?5 import?org.eclipse.swt.widgets.Shell;
    ?6 import?org.eclipse.swt.widgets.Text;
    ?7
    ?8 public ? 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() 方法以結(jié)束程序。

    ?

    ?

    ?

    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)用轉(zhuǎn)化為系統(tǒng)的底層調(diào)用,控制操作系統(tǒng)為 swt 分配的資源。同時我們也可以通過 Display 對象得到操作系統(tǒng)的一些信息。

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

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

    “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è)定一些數(shù)據(jù), setData() 的參數(shù)中 key value 類似于我們在使用 Map 對象中 key value 的含義。

    l ???????? getShells() 得到關(guān)聯(lián)到該 Display 對象的所有沒有 dispose Shell 對象

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

    l ???????? readAndDispatch() 得到事件并且調(diào)用對應(yīng)的監(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

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

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

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

    ? ?

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

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

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

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

    小結(jié)

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



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=368099

    posted on 2006-07-20 17:32 The Spark of Thinking 閱讀(218) 評論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 国产亚洲av人片在线观看| eeuss影院www天堂免费| 亚洲国产成人片在线观看| 日本特黄a级高清免费大片| 日韩精品免费视频| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 亚洲国产精品va在线播放| 国产成人免费一区二区三区| 91精品成人免费国产片| 三年片免费高清版| 日本在线观看免费高清| 亚洲av色香蕉一区二区三区| 亚洲黄色网址大全| 亚洲AV永久无码精品| 2022中文字字幕久亚洲| 国产无遮挡裸体免费视频| 最新欧洲大片免费在线| 久久午夜伦鲁片免费无码| 两个人看的www免费| 一级大黄美女免费播放| 麻豆一区二区三区蜜桃免费| 亚洲AV无码专区亚洲AV桃| 亚洲 日韩 色 图网站| 亚洲国产美女福利直播秀一区二区| 亚洲av综合av一区| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲国产精品一区二区第四页| 日本最新免费不卡二区在线| 国产精品va无码免费麻豆 | 亚洲精品第一国产综合亚AV| 亚洲午夜一区二区电影院| 亚洲综合激情视频| 久久亚洲精品成人av无码网站| 久久亚洲国产精品五月天| 亚洲AV无码成人精品区在线观看 | 亚洲国产成人99精品激情在线| 亚洲国产av高清无码| 亚洲一级毛片免观看| 亚洲免费观看在线视频| 精品亚洲成在人线AV无码| 亚洲午夜理论片在线观看|