hengheng123456789

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
          書(shū)寫(xiě) swt 程序的基本步驟如下:

          1.????? 創(chuàng)建一個(gè)Display對(duì)象。
          2.????? 創(chuàng)建一個(gè)或者多個(gè)Shell對(duì)象,你可以認(rèn)為Shell代表了程序的窗口。
          3.????? Shell內(nèi)創(chuàng)建各種部件(widget)。
          4.????? 對(duì)各個(gè)部件進(jìn)行初始化(外觀,狀態(tài)等),同時(shí)為各種部件的事件創(chuàng)建監(jiān)聽(tīng)器(listener)。
          5.????? 調(diào)用Shell對(duì)象的open()方法以顯示窗體
          6.????? 各種事件進(jìn)行監(jiān)聽(tīng)并處理,直到程序發(fā)出退出消息。
          7.????? 調(diào)用Display對(duì)象的dispose()方法以結(jié)束程序。

          如下面的例子:

          ?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 }

          注意:導(dǎo)入SWT的原生庫(kù)

          ???想要運(yùn)行Java應(yīng)用程序,必須將SWT的原生包導(dǎo)入到項(xiàng)目中,否則該項(xiàng)目在運(yùn)行程序時(shí)會(huì)報(bào)異常“java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path
          ”。
          ???導(dǎo)入SWT
          原生包的步驟如下:
          1)右鍵單擊項(xiàng)目名
          ,在彈出菜單中選擇“導(dǎo)入”。
          2
          )選擇“文件系統(tǒng)”后單擊“下一步”。
          3)通過(guò)“瀏覽”按鈕找到SWT原生庫(kù)的路徑,原生庫(kù)名稱(chēng)為“swt-win32-3063.dll”在plugin目錄中,有些Eclipse版本可能打到org.eclipse.swt.win32.win32.x86_3.1.2.jar包中。

          ????????????
          下面介紹一下類(lèi)包

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

          ???每個(gè)swt程序在最開(kāi)始都必須創(chuàng)建一個(gè)Display對(duì)象。Display對(duì)象起什么作用呢?它是swt與操作系統(tǒng)溝通的一座橋梁。它負(fù)責(zé)swt和操作系統(tǒng)之間的通信。它將swt/JFace的各種調(diào)用轉(zhuǎn)化為系統(tǒng)的底層調(diào)用,控制操作系統(tǒng)為swt分配的資源。同時(shí)我們也可以通過(guò)Display對(duì)象得到操作系統(tǒng)的一些信息。
          ???Display是一個(gè)幕后工作者,它為swt/JFace提供支持,但是你并不能夠從某個(gè)用戶界面中看到它的影子。
          ???它為實(shí)現(xiàn)圖形界面準(zhǔn)備了最基本的條件。而在程序結(jié)束時(shí)我們必須顯式地調(diào)用dispose() 方法來(lái)釋放程序運(yùn)行中所獲得的資源。一般來(lái)說(shuō),一個(gè)程序只需要一個(gè)Display對(duì)象,當(dāng)然沒(méi)有人禁止你創(chuàng)建多個(gè)Display對(duì)象。但是在swtjavadoc中,我們可以看到關(guān)于這個(gè)問(wè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有著眾多的方法,我們不可能一一介紹。在這里只挑選幾個(gè)可能會(huì)比較常用的作一些簡(jiǎn)單介紹。
          l???????? setData()getData():這一對(duì)函數(shù)允許我們?yōu)?/span>Display對(duì)象設(shè)定一些數(shù)據(jù),setData()的參數(shù)中keyvalue類(lèi)似于我們?cè)谑褂?/span>Map對(duì)象中keyvalue的含義。
          l???????? getShells()得到關(guān)聯(lián)到該Display對(duì)象的所有沒(méi)有disposeShell對(duì)象。
          l???????? getCurrent()得到與用戶交互的當(dāng)前線程。
          l???????? readAndDispatch()得到事件并且調(diào)用對(duì)應(yīng)的監(jiān)聽(tīng)器進(jìn)行處理。
          l???????? sleep()等待事件發(fā)生。

          Shell:窗口

          ???一個(gè)Shell對(duì)象就是一個(gè)窗口。你可以在上面放置各種部件創(chuàng)建豐富的圖形界面。
          ???我們都知道窗口有很多種,比如窗口有可以調(diào)整大小的,有不可以的,有的沒(méi)有最大化最小化按鈕。這些窗體的特征在swt中被成為風(fēng)格(style)。一個(gè)窗體的風(fēng)格可以用一個(gè)整數(shù)進(jìn)行定義。這些風(fēng)格的定義在org.eclipse.swt.SWT中。
          ???Shell對(duì)象可用的風(fēng)格包括:BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE , PLICATION_MODAL, MODELESS, PRIMARY_MODAL,S YSTEM_MODAL 。例如:
          ???Shell?shell?=?new?Shell(display,SWT.CLOSE?|?SWT.SYSTEM_MODAL);
          ???最后得到的窗體沒(méi)有最大化和最小化按鈕,并且大小是固定不變的。
          ???因?yàn)?/span>swt運(yùn)行于各種平臺(tái)之上,而這些平臺(tái)上的窗口管理器千差萬(wàn)別,所以所有這些風(fēng)格都不是肯定可以實(shí)現(xiàn)的。在swtjavadoc中,這被稱(chēng)為暗示(hints)。?
          ???Shell對(duì)象的方法大都和GUI有關(guān),比如setEnabled()設(shè)定了窗體是否能夠和用戶進(jìn)行交互,setVisble()設(shè)定了窗體是否可見(jiàn),setActive()將窗體設(shè)為當(dāng)前的活動(dòng)窗口。
          ???我們可以用open()方法打開(kāi)一個(gè)窗體,close()方法關(guān)閉一個(gè)窗體。

          WidgetControl開(kāi)始


          ???WidgetControl的父類(lèi),而Control是我們使用的大多數(shù)部件的父類(lèi)。我們?cè)谝郧暗囊恍┚幊陶Z(yǔ)言中可能接觸過(guò)控件或者組件之類(lèi)的概念,部件(widget)的概念大體和這些相當(dāng)。
          ???在org.eclipse.swt.widgets中定義了眾多的widget,甚至我們前面介紹的Shell也被當(dāng)成widget的一種。
          ???首先我們來(lái)介紹Widget。它是一個(gè)抽象類(lèi),也是所有widget的父類(lèi)。通過(guò)介紹這個(gè)類(lèi),我們可以得出這所有widget的一些共有特性。
          ???Widget的方法中dispose()方法我們?cè)谝郧霸?jīng)見(jiàn)到過(guò),調(diào)用這個(gè)方法時(shí)候,所謂的接收者(receiver,譬如我們這樣寫(xiě):awidget.dispose(),那么awidget就是接收者,而這句話所處的對(duì)象成為調(diào)用者或者caller)和接收者中所包含的其他widget會(huì)釋放它們所占用底層操作系統(tǒng)的資源。這也就是說(shuō)你不必顯式地為程序中創(chuàng)建的每個(gè)widget進(jìn)行dispose()調(diào)用,而只需要確保最外層的widget(比如Display)進(jìn)行了dispose()就可以了。另外還可以通過(guò)isDisposed()判斷是否該widget(接收者)已經(jīng)進(jìn)行了dispose
          ???Widget中的getStyle()方法得到widget的風(fēng)格,而getDisplay()得到所處的Display對(duì)象。
          ???此外Widget中還有兩個(gè)重要方法getData()setData(),這兩個(gè)方法允許我們?yōu)橐粋€(gè)widget附加其他的信息。特別是在你需要跨模塊傳遞widget的時(shí)候,這個(gè)功能顯得非常有用。比如如果一個(gè)文本框中顯示了一段文章中的某句話,如果我們同時(shí)希望把這整篇文章的題目和作者附加上的話可以這樣寫(xiě):

          ???

          1 atext.setData( " title " , " I?Have?A?Dream " );
          2 atext.setData( " author " , " Martin?Luther?King " );

          ???在程序的其他部分可以用 atext.getData(“title”) 得到這篇文章的題目,或者用 atext.getData("author") 得到作者。
          ???在前面我們提到過(guò),Control是今后我們所使用大部分widget的父類(lèi)。在這里我不單獨(dú)進(jìn)行介紹,而是在后面的部分中介紹。

          創(chuàng)建部件

          ???和創(chuàng)建其他java object一樣,我們通過(guò)使用new操作符創(chuàng)建部件的實(shí)例。有一點(diǎn)比較特殊的可能你需要使用帶參數(shù)的構(gòu)造函數(shù)進(jìn)行new操作。類(lèi)似下面的程序:

          Text?text = new ?Text(shell,SWT.CENTER);

          ???這種方法適用于幾乎所有的widget,其中第一個(gè)參數(shù)是父widget,也就是指明了該widget需要被放置道另外哪一個(gè)widget之中,而第二個(gè)參數(shù)是這個(gè)widget的風(fēng)格。

          大小和位置








          posted on 2006-10-31 10:36 哼哼 閱讀(1248) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): SWT
          主站蜘蛛池模板: 邯郸市| 柳州市| 宁河县| 宜兴市| 柘荣县| 宽甸| 错那县| 神农架林区| 邵阳县| 黄大仙区| 盐城市| 桦甸市| 潜山县| 射阳县| 富裕县| 定兴县| 葫芦岛市| 汾西县| 玛曲县| 桓台县| 黄梅县| 绥滨县| 丹寨县| 郸城县| 固阳县| 静宁县| 芦溪县| 澳门| 宜都市| 日照市| 平遥县| 蓬安县| 论坛| 滕州市| 石渠县| 昂仁县| 怀安县| 金山区| 台州市| 崇阳县| 东源县|