<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評論 :: 0 Trackbacks

    幾種特殊的部件

    好像因為大家的抱怨比較多,感覺這一段 csdn blog 似乎又有恢復穩定的跡象了, ^_^

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

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

    Composite

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

    我們先來看一段代碼,為了看起來更簡明,我把 shell 創建之類的代碼都去掉了。

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

    我們在其中定義 composite 的風格時候用到了 SWT.V_SCROLL ,這是用來做什么的呢?它是用來定義這個部件有縱向滾動條的。當然相應當 SWT.H_SCROLL 就定義了部件有橫向滾動條。

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

    如果你把上面的程序填充完整運行一下的話會發現出來的樣子很難看。因為 Composite 本身是看不到的。而可以孤零零地看到一個突出的滾動條在那里。所以實際上單獨使用 Composite 意義不是很大,我們可以使用它的一些子類。

    打開 Composite javadoc ,你會發現它的子類實在是太多了。我們只揀兩個介紹一下, Group TabFolder

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

    11

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

    12

    我們怎么設定各個標簽呢?答案是使用 TabItem 。可以使用 TabItem setControl 方法設定標簽頁上的控件。但是這樣又出現了一個疑問, setControl 中的參數不是數組,如果我們想設定好幾個控件應該怎么辦呢?這個時候就用得上 Composite 了。我們可以首先建一個 Composite 實例,然后在里面添加控件,再把這個 Composite 實例本身作為參數傳遞給 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 中和菜單相關的兩個類是 Menu MenuItem 。顧名思義, Menu 代表的就是整個菜單,而 MenuItem 是菜單中一項一項的實體。打個不恰當的比方來說, Menu 就好比一個書架,而 MenuItem 就是書架上一個一個的格子。

    創建菜單

    如果我們要創建一個菜單,可以根據下面步驟來進行:

    1. ????? 實例化一個 Menu 對象, Menu 有好幾種格式的構造函數,你可以選擇一個,比如像這樣:

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

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

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

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

    l ???????? SWT.DROP_DOWN :下拉式菜單,比如我們在 Word 點擊 文件 之后出現的子菜單就是一個典型的下拉式菜單。

    注意 Menu 本身是沒有 setText 方法的,因為這些具體的顯示屬性你必須在相應當 MenuItem 中設定。

    2. ????? Menu 添加 MenuItem 對象,一個 MenuItem 的構造函數如下所示:

    MenuItem(Menu?parent,? int ?style)

    或者是:

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

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

    l ???????? SWT.PUSH :就是一個普通道菜單項,但是這樣的 MenuItem 不能有層疊的下一級菜單

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

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

    l ???????? SWT.CHECK: 菜單項前面有一個復選標志。

    l ???????? SWT.RADIO: 菜單項前面有單選標志。

    下面的圖示說明了各種風格不同的 Menu MenuItem

    13

    3. ????? 為有下級菜單的 MenuItem (風格必須為 SWT.CASCADE )設定下級菜單的 Menu 對象(用 setMenu 方法),當然了,你仍然需要為這個下一級的 Menu 設定其中的 MenuItem

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

    處理菜單事件

    菜單的事件處理最主要的還是選擇菜單項時候要進行的一些動作,我們可以用 SelectionListener 進行處理。你也可以為菜單展開的事件添加 ArmListener

    下面這段簡單的代碼展示了一個只有退出程序功能的文件菜單。

    ?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 方法時,可以在希望設為加速鍵的字母前面標 & ,比如

    exititem.setText( " &Exit " );

    就標明了這個退出菜單項的加速鍵為 E

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

    ToolBar CoolBar

    在這里,我要向大家說一聲 sorry 了,因為我并不打算在這里詳細介紹 Toolbar 的各種用法,這主要有兩個原因:

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

    2. ????????? 我們在后面介紹 JFace 的時候,你會發現有更簡單的辦法創建菜單和工具條。

    小結

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



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

    posted on 2006-07-20 18:08 The Spark of Thinking 閱讀(291) 評論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 中文字幕亚洲码在线| 9i9精品国产免费久久| 亚洲精品美女久久久久99小说| 高清永久免费观看| 亚洲国产美女精品久久久久| 国产不卡免费视频| 久久美女网站免费| 亚洲人成人伊人成综合网无码| 精品亚洲一区二区三区在线播放| 免费视频成人手机在线观看网址| 国产亚洲精aa在线看| 国产亚洲大尺度无码无码专线| 99久久免费国产香蕉麻豆| 特色特黄a毛片高清免费观看| 在线观看亚洲一区二区| 国产成人精品免费直播| 暖暖日本免费中文字幕| 婷婷亚洲综合五月天小说在线| 亚洲自偷自拍另类12p| 亚洲国产精品无码久久九九| xxxxx免费视频| 9i9精品国产免费久久| 亚洲日韩在线中文字幕综合| 亚洲欧洲第一a在线观看| 亚洲七七久久精品中文国产| 在线视频免费观看高清| 黄页免费在线观看| 视频一区在线免费观看| 亚洲videosbestsex日本| 亚洲人JIZZ日本人| 亚洲国产黄在线观看| 最近中文字幕无吗高清免费视频| 今天免费中文字幕视频| 国产精品免费αv视频| 国产AV无码专区亚洲AV蜜芽 | 亚洲成人免费电影| 亚洲av综合av一区| 在线观看亚洲精品福利片| 国产老女人精品免费视频| 无码中文在线二区免费| 91精品国产免费|