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

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

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

    幻境
    We are extremely fortunate not to know precisely the kind of world we live in
    posts - 22,comments - 39,trackbacks - 0

    JFace中的工具條和菜單

    前一節(jié)中我們簡(jiǎn)單介紹了一下Action。其實(shí)所謂的Action就是一個(gè)最常用的事件,舉個(gè)例子來(lái)說(shuō),對(duì)于一個(gè)按鈕來(lái)說(shuō)它可以有多個(gè)事件,比如按鍵,焦點(diǎn),鼠標(biāo),等等等等吧,但是實(shí)際上在使用程序的時(shí)候,我們最關(guān)心的,就是按下去這個(gè)按鈕會(huì)發(fā)生什么,這個(gè)其實(shí)就是所謂的Action。如果大家以前做過(guò)swing/awt變成的話,應(yīng)該對(duì)Action不會(huì)陌生。

    JFace里面,一個(gè)Action可以對(duì)應(yīng)多個(gè)GUI對(duì)象,這些對(duì)象就是所謂的Contribution Item。比如我們?cè)谝话愠绦蚶锩婧艹R?jiàn)的“文件”菜單,下面都會(huì)有“新建”,“保存”等等。同時(shí)我們可以在工具條上放置相應(yīng)的按鈕,那么這些都是有相同的功能,在JFace里面我們可以只寫(xiě)一個(gè)Action,然后把它映射到不同的ContributionItem去,而不必為每個(gè)部件都寫(xiě)一串處理事件。

    我們下面還是通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明,在JFace中怎么使用菜單和工具條這兩種最基本也是最有用的Contribution Item

    我們這個(gè)程序?qū)懙煤苌担褪且粋€(gè)光禿禿的窗口上做了一個(gè)菜單和工具條按鈕,功能也只有一個(gè),就是每次點(diǎn)一下,就彈出一個(gè)輸入框來(lái)問(wèn)你名字是什么,然后顯示一個(gè)Hello, xxx之類的。

    首先我們還是來(lái)寫(xiě)一個(gè)Action類:

     1 
     2 public class SayHiAction extends Action {
     3     private Shell shell;
     4 
     5     public SayHiAction(Shell shell) {
     6         super();
     7         this.shell = shell;
     8         this.setText("Say&Hi@Ctrl+H");
     9     }
    10 
    11     @Override
    12     public void run() {
    13         InputDialog input = new InputDialog(shell, "Input your name",
    14                 "Please input your name here:"nullnull);
    15         if (input.open() == Window.OK) {
    16             MessageDialog.openInformation(shell, "Hello""Hello, "
    17                     + input.getValue() + "!");
    18         }
    19 
    20     }
    21 
    22 }
    23 



    代碼段 17

    這只是一個(gè)很簡(jiǎn)單的Action類,沒(méi)有太多可說(shuō)的。

    然后我們創(chuàng)建一個(gè)ApplicationWindow類:

     1 
     2 public class Hiyou extends ApplicationWindow {
     3 
     4     private SayHiAction hiaction;
     5     public Hiyou(Shell parentShell) {
     6         super(parentShell);
     7         hiaction=new SayHiAction(getShell());
     8         addMenuBar();
     9         addToolBar(SWT.FLAT | SWT.WRAP);
    10     }
    11 
    12     @Override
    13     protected ToolBarManager createToolBarManager(int style) {
    14         ToolBarManager toolbar=new ToolBarManager();
    15         toolbar.add(hiaction);
    16         return toolbar;
    17     }
    18 
    19     @Override
    20     protected MenuManager createMenuManager() {
    21         MenuManager menubar=new MenuManager();
    22         MenuManager fileMenu=new MenuManager("&File");
    23         fileMenu.add(hiaction);
    24         menubar.add(fileMenu);
    25         return menubar;
    26     }
    27 
    28     /**
    29      * @param args
    30      */
    31     public static void main(String[] args) {
    32         Hiyou window=new Hiyou(null);
    33         window.setBlockOnOpen(true);
    34         window.open();
    35         Display.getCurrent().dispose();
    36     }
    37 
    38 }
    39 

     

    代碼段 18

    大家可能已經(jīng)注意到了,在這里面我們重載了createMenuManagercreateToolBarManager兩個(gè)方法,它們的用途就和名字一樣,一個(gè)是用來(lái)創(chuàng)建菜單的,一個(gè)是用來(lái)創(chuàng)建工具條的。重載了這兩個(gè)方法以后,通過(guò)在構(gòu)造函數(shù)中調(diào)用addMenuBaraddToolBar讓工具條和菜單顯示出來(lái)。

    這里值得一提的是MenuManagerToolBarManager類,如果大家翻一下API文檔的話會(huì)發(fā)現(xiàn)它們都是所謂的contribution manager(實(shí)現(xiàn)了IConntributionManager接口),你可以通過(guò)這些contribution manager來(lái)實(shí)現(xiàn)對(duì)特定組件的管理(添加刪除等等)。

    具體到菜單的創(chuàng)建,看了我們上面的代碼就很明白了,就直接調(diào)用相應(yīng)MenuManageradd方法把action添加上就可以了。JFace會(huì)自動(dòng)找到這個(gè)ActiongetText方法設(shè)置菜單的文字。如果是有好幾層菜單,那么只要在重新new一個(gè)MenuManager添加到已有的MenuManager里面就可以了。就象前面代碼中的:

    menubar.add(fileMenu);



    至于工具條就更簡(jiǎn)單了,創(chuàng)建一個(gè)ToolBarManager然后直接add對(duì)應(yīng)的Action就可以了。

    添加圖標(biāo)

    如果菜單只是文字還沒(méi)有什么,如果你的工具條都是文字是不是會(huì)顯得干巴巴的?其實(shí)只要我們?yōu)?/SPAN>Action設(shè)置ImageDescriptor就可以了,比如你可以自己畫(huà)一個(gè)圖標(biāo)保存到Action的包下面(我畫(huà)了一個(gè)hi.gif),然后把Action的構(gòu)造函數(shù)改寫(xiě)成這樣:

    public SayHiAction(Shell shell) {
            
    super();
            
    this.shell = shell;
            
    this.setText("Say&Hi@Ctrl+H");
            
    this.setImageDescriptor(ImageDescriptor.createFromFile(this.getClass(),
                    
    "hi.gif"));
        }



    大家注意最后一句話,就是為action設(shè)置圖標(biāo)的。然后再運(yùn)行一下就會(huì)發(fā)現(xiàn)菜單和工具欄都有圖標(biāo)了。

    結(jié)束語(yǔ)

    這一系列的文章陸陸續(xù)續(xù)寫(xiě)到今天,也就寫(xiě)完了。回頭看一下,雖然內(nèi)容都很淺顯,不過(guò)我覺(jué)得在swtJFace中文資料缺乏的今天,可能也可以給大家?guī)?lái)一些啟迪。今后我還會(huì)寫(xiě)一些eclipse平臺(tái)開(kāi)發(fā)的文章,大家可以登陸到我的bloghttp://blog.csdn.net/jayliu)查看。

    另外大家也可以登陸到在中國(guó)Eclipse社區(qū)(http://www.eclipseworld.org),在那里你也可以找到很多的幫助和支持,當(dāng)然,你也可以在那里找到我。

    posted on 2005-11-06 13:09 閱讀(4865) 評(píng)論(7)  編輯  收藏 所屬分類: 編程相關(guān)

    FeedBack:
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十一)
    2005-12-21 21:16 | unifly
    通俗易懂,不錯(cuò)……  回復(fù)  更多評(píng)論
      
    # re: 介紹一下關(guān)于打印方面的例子
    2005-12-22 15:44 | 志強(qiáng)
    不錯(cuò),能不能介紹一下關(guān)于打印方面的例子,如何打印圖片。。。  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十一)
    2006-10-04 16:01 | 冰川
    這個(gè)好,謝謝樓主!  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十一) [未登錄](méi)
    2007-05-10 15:04 | aa
    不是說(shuō)每次點(diǎn)一下么,怎么體現(xiàn)出點(diǎn)的阿??  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十一) [未登錄](méi)
    2007-07-28 10:06 | 平平
    感謝樓主了,真的很不錯(cuò) 啊  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十一)
    2007-09-20 17:55 | lanbaibai
    Override,應(yīng)該是重寫(xiě),為什么樓主說(shuō)是重載啊  回復(fù)  更多評(píng)論
      
    # re: SWT/Jface開(kāi)發(fā)入門(mén)指南(十一)
    2008-03-09 23:21 | 網(wǎng)友
    抄襲,繼續(xù)抄  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 日韩激情淫片免费看| 最新欧洲大片免费在线| 亚洲狠狠爱综合影院婷婷| 中文字幕乱码亚洲精品一区| 亚洲一区二区三区免费在线观看| 久久精品国产亚洲av水果派| 亚在线观看免费视频入口| 中文字幕亚洲第一在线| 91免费在线播放| 亚洲日本久久久午夜精品| 成人啪精品视频免费网站| 亚洲综合av一区二区三区| 成年女人视频网站免费m| 亚洲一区二区观看播放| 日本免费一区二区三区最新vr| 久久亚洲精品无码gv| 亚洲国产精品尤物YW在线观看| 一级特黄录像视频免费| 亚洲国产另类久久久精品小说| 久久免费的精品国产V∧| 亚洲成人免费网站| 麻豆一区二区免费播放网站| 亚洲精品永久在线观看| 免费中文字幕不卡视频| 一级做a爱过程免费视频高清| 亚洲日韩一页精品发布| 国产成人精品免费视频大全麻豆 | 中文字幕亚洲综合久久| 国产91色综合久久免费| 久久无码av亚洲精品色午夜| 国产成人精品久久亚洲| 99爱在线观看免费完整版| 久久夜色精品国产噜噜亚洲a| 亚洲成年人啊啊aa在线观看| 日韩免费的视频在线观看香蕉| 亚洲免费在线观看视频| 亚洲毛片不卡av在线播放一区| 日韩午夜理论免费TV影院| 爱情岛论坛亚洲品质自拍视频网站| 亚洲国产精品va在线播放| 在线观看免费污视频|