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

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

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

    我的JAVA窩! - BlogJava

    SWT/JFace開發(fā)入門指南(二)〈轉(zhuǎn)帖〉

    Hello, world! 開始了解 Display Shell

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

    因?yàn)檫@一節(jié)和前一節(jié)是分成兩個(gè)部分貼出來的,所以我仍然將 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)建一個(gè) Display 對象

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

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

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

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

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

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

    ?

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

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

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

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

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

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

    “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 有著眾多的方法,我們不可能一一介紹。在這里只挑選幾個(gè)可能會(huì)比較常用的作一些簡單介紹。

    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() 得到與用戶交互的當(dāng)前線程

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

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

    Shell: 窗口

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

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

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

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

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

    ?

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

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

    因?yàn)?/span> swt 運(yùn)行于各種平臺(tái)之上,而這些平臺(tái)上的窗口管理器千差萬別,所以所有這些風(fēng)格都不是肯定可以實(shí)現(xiàn)的。在 swt javadoc 中,這被稱為暗示( hints )。

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

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

    小結(jié)

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

    posted on 2006-12-08 18:13 J2S 閱讀(273) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎永久免费地址在线观看| 69视频在线观看免费| 亚洲精品国产第1页| 亚洲视频在线免费观看| 色婷婷六月亚洲婷婷丁香| 亚洲成a人片在线播放| 成人免费视频77777| 一区二区三区四区免费视频 | 亚洲 日韩 色 图网站| 香蕉高清免费永久在线视频| 日韩一级片免费观看| 亚洲一区二区无码偷拍| 久久亚洲中文字幕精品一区四| 人人玩人人添人人澡免费| 91丁香亚洲综合社区| 国产黄色一级毛片亚洲黄片大全| 成人免费一区二区无码视频| 日本特黄特色AAA大片免费| 亚洲综合成人婷婷五月网址| 亚洲综合视频在线观看| 婷婷亚洲久悠悠色悠在线播放| 在线亚洲精品自拍| 成人午夜18免费看| 日本h在线精品免费观看| 午夜老司机永久免费看片| 曰批全过程免费视频在线观看无码| 尤物视频在线免费观看| 成人精品国产亚洲欧洲| 精品亚洲成a人片在线观看| 亚洲av永久无码精品古装片| 在线视频免费国产成人| 大学生美女毛片免费视频| 国产卡二卡三卡四卡免费网址| h视频在线免费看| 亚洲高清免费在线观看| 成人av片无码免费天天看| 亚洲久热无码av中文字幕| 久久亚洲精品无码AV红樱桃| 亚洲国产精品嫩草影院在线观看 | 一级一级一片免费高清| 一级全免费视频播放|