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

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

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

    我的JAVA窩! - BlogJava

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

    幾種特殊的部件

    好像因?yàn)榇蠹业谋г贡容^多,感覺這一段 csdn blog 似乎又有恢復(fù)穩(wěn)定的跡象了, ^_^

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

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

    Composite

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

    我們先來看一段代碼,為了看起來更簡明,我把 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

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

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

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

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

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

    11

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

    12

    我們怎么設(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)建菜單

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

    1. ????? 實(shí)例化一個(gè) Menu 對象, 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 :程序中的頂級菜單,比如我們通常看到的包含了 文件,編輯 之類的那個(gè)橫列的菜單欄

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

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

    2. ????? Menu 添加 MenuItem 對象,一個(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 不能有層疊的下一級菜單

    l ???????? SWT.CASCADE: 這樣的 MenuItem 可以有層疊的下一級菜單。可以使用 MenuItem setMenu 方法設(shè)定它的下一級菜單,作為參數(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. ????? 為有下級菜單的 MenuItem (風(fēng)格必須為 SWT.CASCADE )設(shè)定下級菜單的 Menu 對象(用 setMenu 方法),當(dāng)然了,你仍然需要為這個(gè)下一級的 Menu 設(shè)定其中的 MenuItem

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

    處理菜單事件

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

    下面這段簡單的代碼展示了一個(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 對象以后添加 MenuItem ,而工具欄則是在實(shí)例化 ToolBar 以后添加 ToolItem (或者實(shí)例化 CoolBar 以后添加 CoolItem )。甚至它們的一些風(fēng)格,事件也很類似。如果你對照著 ToolBar ToolItem CoolBar,CoolItem )的 API 文檔以及前面我對菜單用法的介紹看到話,很快就能比較熟悉工具條的用法。

    2. ????????? 我們在后面介紹 JFace 的時(shí)候,你會發(fā)現(xiàn)有更簡單的辦法創(chuàng)建菜單和工具條。

    小結(jié)

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

    posted on 2006-12-18 00:22 J2S 閱讀(247) 評論(0)  編輯  收藏


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


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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99re热精品视频国产免费| 四虎在线最新永久免费| 国产亚洲精品拍拍拍拍拍| 久久久久久久国产免费看| 成人免费男女视频网站慢动作| 亚洲精品成a人在线观看夫| 国产一精品一aⅴ一免费| 毛片免费全部播放一级| 曰批全过程免费视频观看免费软件| 亚洲人成在线播放网站| 免费a级毛片高清视频不卡| 中国黄色免费网站| 亚洲色偷精品一区二区三区| 亚洲中文无韩国r级电影| 猫咪免费人成网站在线观看| 免费人成网上在线观看| 亚洲精品午夜在线观看| 亚洲综合国产精品第一页| 国内精品乱码卡1卡2卡3免费| japanese色国产在线看免费| 7777久久亚洲中文字幕| 精品亚洲永久免费精品| 免费国产高清视频| 亚洲一区免费在线观看| 国产VA免费精品高清在线| 亚洲免费网站在线观看| 国产亚洲A∨片在线观看| 日韩成人在线免费视频| 中文字幕免费视频一| 一级做α爱过程免费视频| 亚洲一区二区三区乱码在线欧洲| 在线观看亚洲精品国产| 日本高清免费网站| 五月婷婷在线免费观看| 精品视频一区二区三区免费| 黄网站色视频免费看无下截 | 亚洲精品~无码抽插| 日本不卡视频免费| 日韩吃奶摸下AA片免费观看| 日韩av无码久久精品免费| 成在人线av无码免费高潮水|