<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)榇蠹业谋г贡容^多,感覺這一段 csdn blog 似乎又有恢復(fù)穩(wěn)定的跡象了, ^_^

    前面的兩節(jié)中,我都沒有作一些詳細(xì)的介紹,而是推薦了兩篇文章給大家,可能你會(huì)覺得有點(diǎn)不習(xí)慣,不過我覺得作為一個(gè)軟件開發(fā)者來說,最重要的一個(gè)技能就是你要能夠找到自己所需要的資源。而在 swt JFace )開發(fā)方面呢,其實(shí)如果你能多看一看 eclipse 的聯(lián)機(jī)幫助和官方網(wǎng)站上的各種文檔的話,對(duì)你的開發(fā)一定會(huì)大有幫助。其實(shí)我也都是這樣一步一步慢慢熟悉了的。

    在這一節(jié)中,我要向大家介紹幾種比較特殊的 widget ,包括 Composite Menu 等。

    Composite

    其實(shí)我們已經(jīng)接觸過 Composite 了,我們前面介紹過 Shell Shell 就是一種特殊的 Composite 。就如它的名字一樣, Composite 指的是可以嵌套其他部件的一種部件。

    我們先來看一段代碼,為了看起來更簡(jiǎn)明,我把 shell 創(chuàng)建之類的代碼都去掉了。

    ????????Composite?composite = new ?Composite(shell,SWT.V_SCROLL);
    ????????composite.setLayout(
    new ?RowLayout(SWT.VERTICAL));
    ????????Text?text
    = new ?Text(composite,SWT.NONE);
    ????????text.setSize(
    100 , 30 );

    代碼段 9

    這段程序意義不大,不過我們可以看出, Composite 可以作為其他部件的 parent ,可以有自己的 Layout

    我們?cè)谄渲卸x composite 的風(fēng)格時(shí)候用到了 SWT.V_SCROLL ,這是用來做什么的呢?它是用來定義這個(gè)部件有縱向滾動(dòng)條的。當(dāng)然相應(yīng)當(dāng) SWT.H_SCROLL 就定義了部件有橫向滾動(dòng)條。

    那么什么樣的部件可以有滾動(dòng)條呢?只要是 org.eclipse.swt.widgets.Scrollable 的子類就可以使用這兩個(gè)風(fēng)格定義自己的滾動(dòng)條。這是我們順便提到的一點(diǎn)題外話。

    如果你把上面的程序填充完整運(yùn)行一下的話會(huì)發(fā)現(xiàn)出來的樣子很難看。因?yàn)?/span> Composite 本身是看不到的。而可以孤零零地看到一個(gè)突出的滾動(dòng)條在那里。所以實(shí)際上單獨(dú)使用 Composite 意義不是很大,我們可以使用它的一些子類。

    打開 Composite javadoc ,你會(huì)發(fā)現(xiàn)它的子類實(shí)在是太多了。我們只揀兩個(gè)介紹一下, Group TabFolder

    比起 Composite 來, Group 有一個(gè)邊框,你可以用 setText 方法設(shè)定它的標(biāo)題。所以這樣在視覺上會(huì)更好看一些。下面是一個(gè) Group 的圖示:

    11

    另外一種特殊 Composite 就是 TabFolder TabFolder 允許我們定義標(biāo)簽頁式的窗體。就像下面圖示的那樣:

    12

    我們?cè)趺丛O(shè)定各個(gè)標(biāo)簽?zāi)兀看鸢甘鞘褂?/span> TabItem 。可以使用 TabItem setControl 方法設(shè)定標(biāo)簽頁上的控件。但是這樣又出現(xiàn)了一個(gè)疑問, setControl 中的參數(shù)不是數(shù)組,如果我們想設(shè)定好幾個(gè)控件應(yīng)該怎么辦呢?這個(gè)時(shí)候就用得上 Composite 了。我們可以首先建一個(gè) Composite 實(shí)例,然后在里面添加控件,再把這個(gè) Composite 實(shí)例本身作為參數(shù)傳遞給 TabItem setControl 方法。

    為了更清楚地說明,我們可以看一下下面這段代碼:

    ?1??public?class?TabFolderDemo?{
    ?2?
    ?3?????/**
    ?4??????*?@param?args
    ?5??????*/
    ?6?????public?static?void?main(String[]?args)?{
    ?7?????????Display?display?=?new?Display();
    ?8?
    ?9?????????Shell?shell?=?new?Shell(display,?SWT.DIALOG_TRIM);
    10?????????shell.setLayout(new?RowLayout(SWT.HORIZONTAL));
    11?????????shell.setText("TabFolder?Demo");
    12?
    13?????????TabFolder?tf?=?new?TabFolder(shell,?SWT.NONE);
    14?????????tf.setLayout(new?FillLayout());
    15?????????TabItem?ti?=?new?TabItem(tf,?SWT.NONE);
    16?????????ti.setText("A?Simple?TalItem");
    17?????????Composite?composite?=?new?Composite(tf,?SWT.NONE);
    18?????????composite.setLayout(new?GridLayout(2,?true));
    19?
    20?????????for?(int?i?=?0;?i?<?3;?i++)?{
    21?????????????Label?label?=?new?Label(composite,?SWT.RIGHT);
    22?????????????Text?text?=?new?Text(composite,?SWT.NONE);
    23?????????????label.setText("Text"?+?i?+?":");
    24?
    25?????????}
    26?????????
    27?????????ti.setControl(composite);
    28?????????
    29?????????shell.pack();
    30?????????shell.open();
    31?
    32?????????while?(!shell.isDisposed())?{
    33?????????????if?(!display.readAndDispatch())?{
    34?????????????????display.sleep();
    35?????????????}
    36?????????}
    37?????????display.dispose();
    38?????}
    39?}
    40?

    代碼段 10

    菜單( Menu

    swt 中和菜單相關(guān)的兩個(gè)類是 Menu MenuItem 。顧名思義, Menu 代表的就是整個(gè)菜單,而 MenuItem 是菜單中一項(xiàng)一項(xiàng)的實(shí)體。打個(gè)不恰當(dāng)?shù)谋确絹碚f, Menu 就好比一個(gè)書架,而 MenuItem 就是書架上一個(gè)一個(gè)的格子。

    創(chuàng)建菜單

    如果我們要?jiǎng)?chuàng)建一個(gè)菜單,可以根據(jù)下面步驟來進(jìn)行:

    1. ????? 實(shí)例化一個(gè) Menu 對(duì)象, Menu 有好幾種格式的構(gòu)造函數(shù),你可以選擇一個(gè),比如像這樣:

    ?Menu?menu = new ?Menu(shell,SWT.BAR);

    與其他部件不同的是, Menu 的父控件并不一定需要是 Composite ,而是任何一個(gè) Control 都可以。而 Menu 的風(fēng)格有幾種:

    l ???????? SWT.POP_UP :彈出式菜單

    l ???????? SWT.BAR :程序中的頂級(jí)菜單,比如我們通常看到的包含了 文件,編輯 之類的那個(gè)橫列的菜單欄

    l ???????? SWT.DROP_DOWN :下拉式菜單,比如我們?cè)?/span> Word 點(diǎn)擊 文件 之后出現(xiàn)的子菜單就是一個(gè)典型的下拉式菜單。

    注意 Menu 本身是沒有 setText 方法的,因?yàn)檫@些具體的顯示屬性你必須在相應(yīng)當(dāng) MenuItem 中設(shè)定。

    2. ????? Menu 添加 MenuItem 對(duì)象,一個(gè) MenuItem 的構(gòu)造函數(shù)如下所示:

    MenuItem(Menu?parent,? int ?style)

    或者是:

    ?MenuItem(Menu?parent,? int ?style,? int ?index)

    其中 parent 就是所屬的 Menu ,而 index 可以看成是排列順序。而 style 可以有以下幾種:

    l ???????? SWT.PUSH :就是一個(gè)普通道菜單項(xiàng),但是這樣的 MenuItem 不能有層疊的下一級(jí)菜單

    l ???????? SWT.CASCADE: 這樣的 MenuItem 可以有層疊的下一級(jí)菜單。可以使用 MenuItem setMenu 方法設(shè)定它的下一級(jí)菜單,作為參數(shù)的 Menu 風(fēng)格必須是 SWT.DROP_DOWN

    l ???????? SWT. SEPARATOR: 分隔符,也就是一道橫線,這樣的 MenuItem 是沒有文字的,所以 setText 不起作用。

    l ???????? SWT.CHECK: 菜單項(xiàng)前面有一個(gè)復(fù)選標(biāo)志。

    l ???????? SWT.RADIO: 菜單項(xiàng)前面有單選標(biāo)志。

    下面的圖示說明了各種風(fēng)格不同的 Menu MenuItem

    13

    3. ????? 為有下級(jí)菜單的 MenuItem (風(fēng)格必須為 SWT.CASCADE )設(shè)定下級(jí)菜單的 Menu 對(duì)象(用 setMenu 方法),當(dāng)然了,你仍然需要為這個(gè)下一級(jí)的 Menu 設(shè)定其中的 MenuItem

    4. ????? 如果你的菜單風(fēng)格式 SWT.BAR ,你還需要調(diào)用 Shell setMenuBar (參數(shù)就是頂級(jí)菜單)方法設(shè)定窗體菜單。如果是彈出式菜單也就是 SWT.POP_UP ,你需要調(diào)用所在控件的 setMenu 方法設(shè)定彈出菜單為該菜單。

    處理菜單事件

    菜單的事件處理最主要的還是選擇菜單項(xiàng)時(shí)候要進(jìn)行的一些動(dòng)作,我們可以用 SelectionListener 進(jìn)行處理。你也可以為菜單展開的事件添加 ArmListener

    下面這段簡(jiǎn)單的代碼展示了一個(gè)只有退出程序功能的文件菜單。

    ?1?public?class?MenuDemo?{
    ?2?
    ?3?????private?Shell?_shell;
    ?4?
    ?5?????/**
    ?6??????*?@return?Returns?the?_shell.
    ?7??????*/
    ?8?????public?Shell?getShell()?{
    ?9?????????return?_shell;
    10?????}
    11?
    12?????/**
    13??????*?@param?_shell
    14??????*????????????The?_shell?to?set.
    15??????*/
    16?????public?void?setShell(Shell?shell)?{
    17?????????this._shell?=?shell;
    18?????}
    19?
    20?????public?MenuDemo()?{
    21?????????Display?display?=?new?Display();
    22?????????Shell?shell?=?new?Shell(display,?SWT.SHELL_TRIM);
    23?????????setShell(shell);
    24?????????shell.setLayout(new?RowLayout(SWT.HORIZONTAL));
    25?????????shell.setText("Menu?Demo");
    26?
    27?????????Menu?menubar?=?new?Menu(shell,?SWT.BAR);
    28?????????MenuItem?fileitem?=?new?MenuItem(menubar,?SWT.CASCADE);
    29?????????fileitem.setText("&File");
    30?
    31?????????Menu?filemenu?=?new?Menu(shell,?SWT.DROP_DOWN);
    32?????????fileitem.setMenu(filemenu);
    33?????????MenuItem?exititem?=?new?MenuItem(filemenu,?SWT.PUSH);
    34?????????exititem.setText("&Exit");
    35?????????exititem.addSelectionListener(new?SelectionAdapter()?{
    36?????????????@Override
    37?????????????public?void?widgetSelected(SelectionEvent?arg0)?{
    38?????????????????MessageBox?messagebox?=?new?MessageBox(getShell(),?SWT.YES?|?SWT.NO);
    39?????????????????messagebox.setText("Exit");
    40?????????????????messagebox.setMessage("Exit?the?program?");
    41???????????????
    42?????????????????int?val=messagebox.open();
    43?????????????????if(val?==?SWT.YES)
    44?????????????????{
    45?????????????????????getShell().close();
    46?????????????????}
    47?????????????}
    48?
    49?????????});
    50?????????shell.setMenuBar(menubar);
    51?????????shell.setSize(800,?300);
    52?????????shell.open();
    53?
    54?????????while?(!shell.isDisposed())?{
    55?????????????if?(!display.readAndDispatch())?{
    56?????????????????display.sleep();
    57?????????????}
    58?????????}
    59?????????display.dispose();
    60?????}
    61?
    62?????public?static?void?main(String[]?args)?{
    63?
    64?????????MenuDemo?demo=new?MenuDemo();
    65?????}
    66?
    67?}
    68?

    代碼段 11

    加速鍵

    在使用 MenuItem setText 方法時(shí),可以在希望設(shè)為加速鍵的字母前面標(biāo) & ,比如

    exititem.setText( " &Exit " );

    就標(biāo)明了這個(gè)退出菜單項(xiàng)的加速鍵為 E

    另外也可以使用 setAccelerator 方法設(shè)定加速鍵。

    ToolBar CoolBar

    在這里,我要向大家說一聲 sorry 了,因?yàn)槲也⒉淮蛩阍谶@里詳細(xì)介紹 Toolbar 的各種用法,這主要有兩個(gè)原因:

    1. ????????? 工具欄的用法和菜單是類似的,菜單是在實(shí)例化一個(gè) Menu 對(duì)象以后添加 MenuItem ,而工具欄則是在實(shí)例化 ToolBar 以后添加 ToolItem (或者實(shí)例化 CoolBar 以后添加 CoolItem )。甚至它們的一些風(fēng)格,事件也很類似。如果你對(duì)照著 ToolBar ToolItem CoolBar,CoolItem )的 API 文檔以及前面我對(duì)菜單用法的介紹看到話,很快就能比較熟悉工具條的用法。

    2. ????????? 我們?cè)诤竺娼榻B JFace 的時(shí)候,你會(huì)發(fā)現(xiàn)有更簡(jiǎn)單的辦法創(chuàng)建菜單和工具條。

    小結(jié)

    這一節(jié)介紹了幾種有限的部件,關(guān)于 swt 的介紹到這一節(jié)為止就暫時(shí)告一段落了。在以后的部分我會(huì)開始給大家介紹 JFace 。當(dāng)然了,這并不意味著以后再也沒有 swt 的內(nèi)容介紹給大家了,只是我覺得到現(xiàn)在為止,大家應(yīng)該已經(jīng)可以寫一些簡(jiǎn)單的 swt 程序了,我如果再多介紹,就類似于對(duì) API 文檔的翻譯了。當(dāng)然如果以后有充足的時(shí)間的話,我也希望能夠向大家多介紹一些相關(guān)的內(nèi)容。



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=380786

    posted on 2006-07-20 18:08 The Spark of Thinking 閱讀(291) 評(píng)論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 亚洲精品乱码久久久久久久久久久久 | 久久国产精品免费一区二区三区| 一级毛片不卡免费看老司机 | 久久人午夜亚洲精品无码区| 日亚毛片免费乱码不卡一区| 国精产品一区一区三区免费视频| 99ee6热久久免费精品6| 大学生a级毛片免费观看| 高清在线亚洲精品国产二区| 亚洲人成色7777在线观看| 亚洲综合久久1区2区3区| 亚洲va中文字幕| 中文字幕无码毛片免费看| 成年人网站免费视频| 免费v片在线观看无遮挡| 亚洲AV无码一区二区二三区入口| 亚洲宅男精品一区在线观看| 美女视频黄频a免费观看| 久久精品电影免费动漫| 女人毛片a级大学毛片免费| 久久精品国产亚洲Aⅴ香蕉| 亚洲欧洲自拍拍偷综合| 免费国产高清毛不卡片基地| 无码少妇精品一区二区免费动态| 毛片免费在线视频| 伊人久久大香线蕉亚洲| 亚洲AV无码国产精品色| 精品一区二区三区免费观看| 日本片免费观看一区二区| 免费夜色污私人影院在线观看| 久久夜色精品国产噜噜噜亚洲AV | 免费萌白酱国产一区二区| 亚洲春色在线视频| 亚洲爆乳少妇无码激情| 日本免费污片中国特一级| 永久久久免费浮力影院| 亚洲国产精品无码成人片久久| 亚洲精品精华液一区二区| 美女视频黄的免费视频网页 | 亚洲一卡2卡4卡5卡6卡在线99 | 亚洲精品国产首次亮相 |