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

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

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

    The Spark of Thinking

    Focus on Eclipse Tools.

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評(píng)論 :: 0 Trackbacks

    初步體驗(yàn) widget

    大家好,五一已經(jīng)過去了,你們玩得開心么?

    在前面的兩篇文章中,我向大家介紹了 swt 的一些基本知識(shí),現(xiàn)在讓我們繼續(xù)下去討論一下 swt 中的 widget 相關(guān)的一些知識(shí)以及介紹幾種最為簡(jiǎn)單的 widget

    Widget Control 開始

    Widget Control 的父類,而 Control 是我們使用的大多數(shù)部件的父類。我們?cè)谝郧暗囊恍┚幊陶Z言中可能接觸過 控件 或者 組件 之類的概念,部件( widget )的概念大體和這些相當(dāng)。

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

    因?yàn)榭捎玫?/span> widget 如此之多,所以我大概沒有辦法全部一一介紹。在這一節(jié)中,我會(huì)介紹幾種常用的 widget 。相信善于觸類旁通的你通過這些極為簡(jiǎn)略的介紹應(yīng)該可以開始使用各種 widget ,在使用中不斷完善自己的認(rèn)識(shí)。

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

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

    另外還可以通過 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í)希望把這整篇文章的題目和作者附加上的話可以這樣寫: ?

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


    代碼段 3

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

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

    創(chuàng)建部件

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

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

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

    大小和位置

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

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

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

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

    隱藏與失效

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

    提示文本

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

    幾種常用的部件

    Label

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

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

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

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

    ?1 public ? class ?Labels? {
    ?2 ??
    ?3 ???? public ? static ? void ?main(String[]?args)? {
    ?4 ????????Display?display? = ? new ?Display();
    ?5 ????????Shell?shell? = ? new ?Shell(display,SWT.SHELL_TRIM);
    ?6 ????????RowLayout?layout = new ?RowLayout(SWT.VERTICAL);
    ?7 ????????shell.setLayout(layout);
    ?8 ????????shell.setText( " Labels " );
    ?9 ????????Label?label1 = new ?Label(shell,SWT.CENTER);
    10 ????????label1.setText( " Label?Demo " );
    11 ????????Label?label2 = new ?Label(shell,SWT.SEPARATOR? | ?SWT.HORIZONTAL);
    12 ????????shell.setSize( 100 , 100 );
    13 ????????shell.open();
    14
    15 ???????? while ?( ! shell.isDisposed())? {
    16 ???????????? if ?( ! display.readAndDispatch())? {
    17 ????????????????display.sleep();
    18 ????????????}

    19 ????????}

    20 ????????display.dispose();
    21 ????}

    22 }

    23


    代碼段 4

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

    o_labels.JPG
    4

    Text

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

    Button

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

    如果風(fēng)格定義成 SWT.PUSH ,它就是一個(gè)普通的按鈕。

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

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

    如果定義為 SWT.CHECK ,它是一個(gè)復(fù)選框。

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

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

    ?1 public ? class ?Buttons? {
    ?2
    ?3 ???????? public ? static ? void ?main(String[]?args)? {
    ?4 ????????????Display?display? = ? new ?Display();
    ?5 ????????????Shell?shell? = ? new ?Shell(display,SWT.SHELL_TRIM);
    ?6 ????????????RowLayout?layout = new ?RowLayout(SWT.VERTICAL);
    ?7 ????????????shell.setLayout(layout);
    ?8 ????????????shell.setText( " Buttons " );
    ?9 ????????????
    10 ????????????Button?pushbutton = new ?Button(shell,SWT.PUSH? | ?SWT.CENTER);
    11 ????????????pushbutton.setText( " SWT.PUSH " );
    12
    13 ????????????Button?togglebutton = new ?Button(shell,SWT.TOGGLE? | ?SWT.LEFT);
    14 ????????????togglebutton.setText( " SWT.TOGGLE " );
    15 ????????????togglebutton.setSelection( true );
    16 ????????????
    17 ????????????Button?arrowbutton = new ?Button(shell,SWT.ARROW? | ?SWT.LEFT);
    18 ????????????
    19 ????????????
    20 ????????????Button?checkbox = new ?Button(shell,SWT.CHECK);
    21 ????????????checkbox.setText( " SWT.CHECK " );
    22 ??????????
    23 ????????????Button?radio = new ?Button(shell,SWT.RADIO);
    24 ????????????radio.setText( " SWT.RADIO " );
    25 ????????????radio.setSelection( true );
    26 ????????????
    27 ????????????shell.pack();
    28 ????????????shell.open();
    29
    30 ???????????? while ?( ! shell.isDisposed())? {
    31 ???????????????? if ?( ! display.readAndDispatch())? {
    32 ????????????????????display.sleep();
    33 ????????????????}

    34 ????????????}

    35 ????????????display.dispose();????
    36 ????}

    37 }


    代碼段 5

    最后得到的窗口如下圖:

    o_buttons.JPG
    5

    小結(jié)

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

    posted on 2006-07-20 17:53 The Spark of Thinking 閱讀(225) 評(píng)論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 色婷婷亚洲一区二区三区| 亚洲制服丝袜中文字幕| 亚洲高清在线mv| 亚洲国产成人综合| 亚洲AV色欲色欲WWW| 乱爱性全过程免费视频| 亚洲精品高清久久| 久久91亚洲人成电影网站| 国产精品V亚洲精品V日韩精品| 亚洲精品午夜国产VA久久成人| 亚洲综合一区二区| 亚洲精品电影在线| 亚洲日本天堂在线| 亚洲国产日韩a在线播放| 无码AV动漫精品一区二区免费| 午夜精品一区二区三区免费视频| 色窝窝免费一区二区三区| 免费成人在线电影| 欧美日韩国产免费一区二区三区| 亚洲高清无码综合性爱视频| 亚洲日本一区二区三区| 久久久久亚洲精品无码网址色欲 | 成人永久免费高清| 国产亚洲美女精品久久久| 中文字幕亚洲综合久久菠萝蜜 | 三年片在线观看免费大全电影| 最近2019中文字幕免费看最新| MM131亚洲国产美女久久| 亚洲综合色一区二区三区小说| 黄色毛片视频免费| 亚洲黄片手机免费观看| 麻豆国产精品免费视频| 免费乱码中文字幕网站| 精品国产日韩亚洲一区| 亚洲国产成a人v在线| h视频在线观看免费| 好男人视频在线观看免费看片| 久久精品国产亚洲沈樵| 男人的天堂av亚洲一区2区| 99热这里有免费国产精品| 亚洲国产成人乱码精品女人久久久不卡|