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

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

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

    hengheng123456789

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
    書寫 swt 程序的基本步驟如下:

    1.????? 創建一個Display對象。
    2.????? 創建一個或者多個Shell對象,你可以認為Shell代表了程序的窗口。
    3.????? Shell內創建各種部件(widget)。
    4.????? 對各個部件進行初始化(外觀,狀態等),同時為各種部件的事件創建監聽器(listener)。
    5.????? 調用Shell對象的open()方法以顯示窗體
    6.????? 各種事件進行監聽并處理,直到程序發出退出消息。
    7.????? 調用Display對象的dispose()方法以結束程序。

    如下面的例子:

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

    注意:導入SWT的原生庫

    ???想要運行Java應用程序,必須將SWT的原生包導入到項目中,否則該項目在運行程序時會報異?!?/span>java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path
    ”。
    ???導入SWT
    原生包的步驟如下:
    1)右鍵單擊項目名
    ,在彈出菜單中選擇“導入”。
    2
    )選擇“文件系統”后單擊“下一步”。
    3)通過“瀏覽”按鈕找到SWT原生庫的路徑,原生庫名稱為“swt-win32-3063.dll”在plugin目錄中,有些Eclipse版本可能打到org.eclipse.swt.win32.win32.x86_3.1.2.jar包中。

    ????????????
    下面介紹一下類包

    Display:與操作系統溝通的橋梁

    ???每個swt程序在最開始都必須創建一個Display對象。Display對象起什么作用呢?它是swt與操作系統溝通的一座橋梁。它負責swt和操作系統之間的通信。它將swt/JFace的各種調用轉化為系統的底層調用,控制操作系統為swt分配的資源。同時我們也可以通過Display對象得到操作系統的一些信息。
    ???Display是一個幕后工作者,它為swt/JFace提供支持,但是你并不能夠從某個用戶界面中看到它的影子。
    ???它為實現圖形界面準備了最基本的條件。而在程序結束時我們必須顯式地調用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 。例如:
    ???Shell?shell?=?new?Shell(display,SWT.CLOSE?|?SWT.SYSTEM_MODAL);
    ???最后得到的窗體沒有最大化和最小化按鈕,并且大小是固定不變的。
    ???因為swt運行于各種平臺之上,而這些平臺上的窗口管理器千差萬別,所以所有這些風格都不是肯定可以實現的。在swtjavadoc中,這被稱為暗示(hints)。?
    ???Shell對象的方法大都和GUI有關,比如setEnabled()設定了窗體是否能夠和用戶進行交互,setVisble()設定了窗體是否可見,setActive()將窗體設為當前的活動窗口。
    ???我們可以用open()方法打開一個窗體,close()方法關閉一個窗體。

    WidgetControl開始


    ???WidgetControl的父類,而Control是我們使用的大多數部件的父類。我們在以前的一些編程語言中可能接觸過控件或者組件之類的概念,部件(widget)的概念大體和這些相當。
    ???在org.eclipse.swt.widgets中定義了眾多的widget,甚至我們前面介紹的Shell也被當成widget的一種。
    ???首先我們來介紹Widget。它是一個抽象類,也是所有widget的父類。通過介紹這個類,我們可以得出這所有widget的一些共有特性。
    ???Widget的方法中dispose()方法我們在以前曾經見到過,調用這個方法時候,所謂的接收者(receiver,譬如我們這樣寫:awidget.dispose(),那么awidget就是接收者,而這句話所處的對象成為調用者或者caller)和接收者中所包含的其他widget會釋放它們所占用底層操作系統的資源。這也就是說你不必顯式地為程序中創建的每個widget進行dispose()調用,而只需要確保最外層的widget(比如Display)進行了dispose()就可以了。另外還可以通過isDisposed()判斷是否該widget(接收者)已經進行了dispose。
    ???Widget中的getStyle()方法得到widget的風格,而getDisplay()得到所處的Display對象。
    ???此外Widget中還有兩個重要方法getData()setData(),這兩個方法允許我們為一個widget附加其他的信息。特別是在你需要跨模塊傳遞widget的時候,這個功能顯得非常有用。比如如果一個文本框中顯示了一段文章中的某句話,如果我們同時希望把這整篇文章的題目和作者附加上的話可以這樣寫:

    ???

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

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

    創建部件

    ???和創建其他java object一樣,我們通過使用new操作符創建部件的實例。有一點比較特殊的可能你需要使用帶參數的構造函數進行new操作。類似下面的程序:

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

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

    大小和位置








    posted on 2006-10-31 10:36 哼哼 閱讀(1243) 評論(0)  編輯  收藏 所屬分類: SWT
    主站蜘蛛池模板: igao激情在线视频免费| 久久精品视频免费| 午夜免费啪视频在线观看| 黄色片在线免费观看| 国产黄色一级毛片亚洲黄片大全| 久久亚洲精品中文字幕| 国产亚洲精品免费| 51视频精品全部免费最新| 香港经典a毛片免费观看看| 久久国产精品免费看| 国产精品视频免费一区二区三区| 亚洲五月综合缴情在线观看| 亚洲欧美一区二区三区日产| 成全在线观看免费观看大全| 性感美女视频免费网站午夜 | 亚洲国产成人久久笫一页| 亚洲视频在线观看网站| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲国产综合精品一区在线播放| 亚洲精品韩国美女在线| 亚洲乱码一二三四区麻豆| 国产A∨免费精品视频| 毛片免费视频观看| 亚洲免费视频在线观看| 男女交性无遮挡免费视频| 男女免费观看在线爽爽爽视频| 亚洲香蕉网久久综合影视| 久久久亚洲精华液精华液精华液| 最好看的中文字幕2019免费| 在线亚洲97se亚洲综合在线| 亚洲国产欧美一区二区三区| 亚洲视频免费播放| 亚洲成av人片在线观看无码不卡| 狠狠热精品免费观看| 无码人妻精品一二三区免费| 久久亚洲美女精品国产精品| 中文在线免费观看| 亚洲国产aⅴ综合网| 亚洲另类无码一区二区三区| 国产精品永久免费10000| 亚洲αv久久久噜噜噜噜噜|