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

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

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

    我的JAVA窩! - BlogJava

    SWT/JFace開發入門指南(三)〈轉帖〉

    初步體驗 widget

    ?

    Widget Control 開始

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

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

    因為可用的 widget 如此之多,所以我大概沒有辦法全部一一介紹。在這一節中,我會介紹幾種常用的 widget 。相信善于觸類旁通的你通過這些極為簡略的介紹應該可以開始使用各種 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 的時候,這個功能顯得非常有用。比如如果一個文本框中顯示了一段文章中的某句話,如果我們同時希望把這整篇文章的題目和作者附加上的話可以這樣寫:

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

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

    代碼段 3

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

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

    創建部件

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

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

    ?

    ?

    ?

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

    大小和位置

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

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

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

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

    隱藏與失效

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

    提示文本

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

    幾種常用的部件

    Label

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

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

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

    下面這個程序給出了標簽的兩種表現形式,其中使用了 Layout ,關于 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 就是最簡單的文本框,與標簽一樣,我們可以通過設定它的風格來表示它的對齊方式( SWT.CENTER SWT.LEFT SWT.RIGHT ),另外還有其他一些用于文本支持的方法,比如 insert() paster() copy() setSelection() selectAll() 等,這些方法在后面介紹 swt 事件模式會進行更詳細的介紹。

    Button

    swt 中, Button 并不僅僅是按鈕。構造時候定義的風格不同,所體現出的外觀也不一樣。

    如果風格定義成 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

    小結

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

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


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


    網站導航:
     
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 看成年女人免费午夜视频| 亚洲午夜国产精品无卡| 免费播放国产性色生活片| 午夜一区二区免费视频| 亚洲色偷偷色噜噜狠狠99网| 成人毛片免费观看视频大全| 一本色道久久88—综合亚洲精品| 最近免费中文字幕4| 精品亚洲成A人在线观看青青| 日本一道本高清免费| 免费在线观看亚洲| 亚洲国产综合人成综合网站| WWW免费视频在线观看播放| 亚洲日韩aⅴ在线视频| 特级精品毛片免费观看| 亚洲欧洲尹人香蕉综合| 日韩欧美一区二区三区免费观看| 亚洲真人无码永久在线观看| 无码国产亚洲日韩国精品视频一区二区三区| 美女露隐私全部免费直播| 亚洲午夜未满十八勿入网站2| 亚洲免费人成在线视频观看 | 免费在线观看黄网站| 国产福利免费视频| 亚洲短视频男人的影院| 99久久久精品免费观看国产 | 亚洲欧洲日产国码久在线| 免费v片在线观看无遮挡| 久久精品无码专区免费| 亚洲精品影院久久久久久| 免费高清av一区二区三区| 中文字幕无线码免费人妻| 亚洲精品一卡2卡3卡三卡四卡| 国产美女无遮挡免费视频网站 | 国产亚洲精品成人久久网站| 77777亚洲午夜久久多人| 中文字幕乱码免费视频| 免费一区二区无码视频在线播放| 亚洲伦理一区二区| 老司机永久免费网站在线观看| a级毛片在线免费|