我的JAVA窩! - BlogJava

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

          初步體驗 widget

          ?

          Widget Control 開始

          Widget Control 的父類,而 Control 是我們使用的大多數(shù)部件的父類。我們在以前的一些編程語言中可能接觸過 控件 或者 組件 之類的概念,部件( widget )的概念大體和這些相當。

          org.eclipse.swt.widgets 中定義了眾多的 widget ,甚至我們前面介紹的 Shell 也被當成 widget 的一種。

          因為可用的 widget 如此之多,所以我大概沒有辦法全部一一介紹。在這一節(jié)中,我會介紹幾種常用的 widget 。相信善于觸類旁通的你通過這些極為簡略的介紹應該可以開始使用各種 widget ,在使用中不斷完善自己的認識。

          首先我們來介紹 Widget 。它是一個抽象類,也是所有 widget 的父類。通過介紹這個類,我們可以得出這所有 widget 的一些共有特性。

          Widget 的方法中 dispose() 方法我們在以前曾經(jīng)見到過,調(diào)用這個方法時候,所謂的接收者( receiver ,譬如我們這樣寫: awidget.dispose() ,那么 awidget 就是接收者,而這句話所處的對象成為調(diào)用者或者 caller )和接收者中所包含的其他 widget 會釋放它們所占用底層操作系統(tǒng)的資源。這也就是說你不必顯式地為程序中創(chuàng)建的每個 widget 進行 dispose() 調(diào)用,而只需要確保最外層的 widget (比如 Display )進行了 dispose() 就可以了。

          另外還可以通過 isDisposed() 判斷是否該 widget (接收者)已經(jīng)進行了 dispose

          Widget 中的 getStyle() 方法得到 widget 的風格,而 getDisplay() 得到所處的 Display 對象。

          此外 Widget 中還有兩個重要方法 getData() setData() ,這兩個方法允許我們?yōu)橐粋€ widget 附加其他的信息。特別是在你需要跨模塊傳遞 widget 的時候,這個功能顯得非常有用。比如如果一個文本框中顯示了一段文章中的某句話,如果我們同時希望把這整篇文章的題目和作者附加上的話可以這樣寫:

          atext.setData(“title”,”I Have A Dream”);

          atext.setData(“author”,” Martin Luther King”);

          代碼段 3

          程序的其他部分可以用 atext.getData(“title”) 得到這篇文章的題目,或者用 atext.getData(“author”) 得到作者。

          在前面我們提到過, Control 是今后我們所使用大部分 widget 的父類。在這里我不單獨進行介紹,而是在后面的部分中介紹。

          創(chuàng)建部件

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

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

          ?

          ?

          ?

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

          大小和位置

          僅僅創(chuàng)建一個部件并不足以讓你看到它,因為一個部件初始的長和寬都是 0 。你還需要設(shè)定它的大小。你可以用 setSize() 或者 setBounds() 方法手動設(shè)定部件的大小,也可以讓系統(tǒng)自動調(diào)整部件的大小到一個合適的值,這個值也被成為首選尺寸( preferred size )。

          可以通過調(diào)用 pack() 方法讓系統(tǒng)調(diào)整控件大小。如果你希望系統(tǒng)自動調(diào)整,那么你需要首先設(shè)定控件需要表達的內(nèi)容。舉個例子來說,如果你的部件是一個文本框或者標簽,你應該首先設(shè)定它所要顯示的文本,這樣系統(tǒng)可以通過文本的長度計算。

          對于部件的位置,同樣可以使用 setLocation() 或者 setBounds() 進行設(shè)定。

          這里值得一提的是所謂的 bounds ,其實 bounds 可以看成是大小和尺寸的綜合。比如 setBounds(int x, int y,int width,int height) 的參數(shù)中, x y 描述的是位置信息,而 width height 描述了大小。

          隱藏與失效

          通過部件的 setVisible 方法可以控制部件進行隱藏或是顯示。通過 setEnabled 方法可以控制部件是否有效。一個無效的部件不會對用戶的任何動作作出響應。這兩個方法的參數(shù)都是布爾型的。

          提示文本

          可以通過 setToolTipText() 方法設(shè)定部件的提示文本。

          幾種常用的部件

          Label

          標簽用來顯示靜態(tài)的文本或者圖像。關(guān)于圖像和色彩我會在后面的部分進行介紹。

          標簽可以使用 SWT.CENTER, SWT.LEFT, SWT.RIGHT 中的一種指明文本的對齊方式(居中對齊,左對齊,右對齊)。

          你也可以通過設(shè)置標簽屬性為 SWT. SEPARATOR 使標簽成為一條分隔符。

          下面這個程序給出了標簽的兩種表現(xiàn)形式,其中使用了 Layout ,關(guān)于 Layout 的詳細情況也會在后面的部分進行介紹:

          public class Labels {

          ?

          ??? public static void main(String[] args) {

          ??????? Display display = new Display();

          ??????? Shell shell = new Shell(display,SWT.SHELL_TRIM);

          ??????? RowLayout layout=new RowLayout(SWT.VERTICAL);

          ??????? shell.setLayout(layout);

          ??????? shell.setText("Labels");

          ??????? Label label1=new Label(shell,SWT.CENTER);

          ??????? label1.setText("Label Demo");

          ??????? Label label2=new Label(shell,SWT.SEPARATOR | SWT.HORIZONTAL);

          ??????? shell.setSize(100,100);

          ??????? shell.open();

          ?

          ?

          ?

          ??????? while (!shell.isDisposed()) {

          ??????????? if (!display.readAndDispatch()) {

          ??????????????? display.sleep();

          ???? ???????}

          ??????? }

          ??????? display.dispose();

          ??? }

          }

          代碼段 4

          最后得到的效果可以參照下圖:

          aspectratio="t" v:ext="edit">

          4

          Text

          Text 就是最簡單的文本框,與標簽一樣,我們可以通過設(shè)定它的風格來表示它的對齊方式( SWT.CENTER SWT.LEFT SWT.RIGHT ),另外還有其他一些用于文本支持的方法,比如 insert() paster() copy() setSelection() selectAll() 等,這些方法在后面介紹 swt 事件模式會進行更詳細的介紹。

          Button

          swt 中, Button 并不僅僅是按鈕。構(gòu)造時候定義的風格不同,所體現(xiàn)出的外觀也不一樣。

          如果風格定義成 SWT.PUSH ,它就是一個普通的按鈕。

          如果定義為 SWT.TOGGLE ,它在被按下以后會保持按下的形狀(而不會彈起來),直到鼠標再次在上面按一下才會回復彈起的形狀。

          如果風格定義為 SWT.ARROW ,它是一個帶箭頭的按鈕,箭頭的指向可以選擇 SWT.LEFT SWT.RIGHT SWT.UP SWT.DOWN 中的一個。

          如果定義為 SWT.CHECK ,它是一個復選框。

          如果定義為 SWT.RADIO ,它是一個單選框。

          下面一段程序演示了各種不同的 Button

          public class Buttons {

          ?

          ?

          ?

          ??????? public static void main(String[] args) {

          ??????????? Display display = new Display();

          ??????????? Shell shell = new Shell(display,SWT.SHELL_TRIM);

          ??????????? RowLayout layout=new RowLayout(SWT.VERTICAL);

          ??????????? shell.setLayout(layout);

          ??????????? shell.setText("Buttons");

          ???????????

          ??????????? Button pushbutton=new Button(shell,SWT.PUSH | SWT.CENTER);

          ??????????? pushbutton.setText("SWT.PUSH");

          ?

          ?

          ?

          ??????????? Button togglebutton=new Button(shell,SWT.TOGGLE | SWT.LEFT);

          ??????????? togglebutton.setText("SWT.TOGGLE");

          ??????????? togglebutton.setSelection(true);

          ???????????

          ??????????? Button arrowbutton=new Button(shell,SWT.ARROW | SWT.LEFT);

          ???????????

          ???????????

          ??????????? Button checkbox=new Button(shell,SWT.CHECK);

          ??????????? checkbox.setText("SWT.CHECK");

          ?????????

          ??????????? Button radio=new Button(shell,SWT.RADIO);

          ??????????? radio.setText("SWT.RADIO");

          ??????????? radio.setSelection(true);

          ???????????

          ??????????? shell.pack();

          ??????????? shell.open();

          ?

          ?

          ?

          ??????????? while (!shell.isDisposed()) {

          ??????????????? if (!display.readAndDispatch()) {

          ??????????????????? display.sleep();

          ??????????????? }

          ??????????? }

          ??????????? display.dispose();???

          ??? }

          }

          代碼段 5

          最后得到的窗口如下圖:

          5

          小結(jié)

          在這一節(jié)中我向大家介紹了 widget 的一些基本知識,還有幾種簡單的 widget 。你可能注意到這些描述僅僅限于外觀方面,如何讓 widget 和用戶交互起來呢?這需要我們處理各種用戶事件,在下一節(jié)中我會向大家介紹 swt 的事件模式。

          posted on 2006-12-08 19:30 J2S 閱讀(252) 評論(0)  編輯  收藏


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


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

          導航

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新巴尔虎左旗| 儋州市| 三都| 东乡族自治县| 穆棱市| 师宗县| 资源县| 天祝| 化州市| 临桂县| 三原县| 洪洞县| 涡阳县| 双桥区| 波密县| 邵东县| 许昌市| 临清市| 浙江省| 永年县| 思茅市| 克东县| 合水县| 临清市| 宁河县| 会东县| 安庆市| 墨竹工卡县| 孝昌县| 罗甸县| 宝清县| 石城县| 惠州市| 峨眉山市| 西和县| 米脂县| 巩义市| 类乌齐县| 甘孜| 从江县| 伊川县|