<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中的工具條和菜單

    前一節中我們簡單介紹了一下Action。其實所謂的Action就是一個最常用的事件,舉個例子來說,對于一個按鈕來說它可以有多個事件,比如按鍵,焦點,鼠標,等等等等吧,但是實際上在使用程序的時候,我們最關心的,就是按下去這個按鈕會發生什么,這個其實就是所謂的Action。如果大家以前做過swing/awt變成的話,應該對Action不會陌生。

    JFace里面,一個Action可以對應多個GUI對象,這些對象就是所謂的Contribution Item。比如我們在一般程序里面很常見的“文件”菜單,下面都會有“新建”,“保存”等等。同時我們可以在工具條上放置相應的按鈕,那么這些都是有相同的功能,在JFace里面我們可以只寫一個Action,然后把它映射到不同的ContributionItem去,而不必為每個部件都寫一串處理事件。

    我們下面還是通過一個簡單的例子來說明,在JFace中怎么使用菜單和工具條這兩種最基本也是最有用的Contribution Item

    我們這個程序寫得很傻,就是一個光禿禿的窗口上做了一個菜單和工具條按鈕,功能也只有一個,就是每次點一下,就彈出一個輸入框來問你名字是什么,然后顯示一個Hello, xxx之類的。

    首先我們還是來寫一個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

    這只是一個很簡單的Action類,沒有太多可說的。

    然后我們創建一個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

    大家可能已經注意到了,在這里面我們重載了createMenuManagercreateToolBarManager兩個方法,它們的用途就和名字一樣,一個是用來創建菜單的,一個是用來創建工具條的。重載了這兩個方法以后,通過在構造函數中調用addMenuBaraddToolBar讓工具條和菜單顯示出來。

    這里值得一提的是MenuManagerToolBarManager類,如果大家翻一下API文檔的話會發現它們都是所謂的contribution manager(實現了IConntributionManager接口),你可以通過這些contribution manager來實現對特定組件的管理(添加刪除等等)。

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

    menubar.add(fileMenu);



    至于工具條就更簡單了,創建一個ToolBarManager然后直接add對應的Action就可以了。

    添加圖標

    如果菜單只是文字還沒有什么,如果你的工具條都是文字是不是會顯得干巴巴的?其實只要我們為Action設置ImageDescriptor就可以了,比如你可以自己畫一個圖標保存到Action的包下面(我畫了一個hi.gif),然后把Action的構造函數改寫成這樣:

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



    大家注意最后一句話,就是為action設置圖標的。然后再運行一下就會發現菜單和工具欄都有圖標了。

    結束語

    這一系列的文章陸陸續續寫到今天,也就寫完了。回頭看一下,雖然內容都很淺顯,不過我覺得在swtJFace中文資料缺乏的今天,可能也可以給大家帶來一些啟迪。今后我還會寫一些eclipse平臺開發的文章,大家可以登陸到我的bloghttp://blog.csdn.net/jayliu)查看。

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

    posted on 2005-11-06 13:09 閱讀(4870) 評論(7)  編輯  收藏 所屬分類: 編程相關

    FeedBack:
    # re: SWT/Jface開發入門指南(十一)
    2005-12-21 21:16 | unifly
    通俗易懂,不錯……  回復  更多評論
      
    # re: 介紹一下關于打印方面的例子
    2005-12-22 15:44 | 志強
    不錯,能不能介紹一下關于打印方面的例子,如何打印圖片。。。  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十一)
    2006-10-04 16:01 | 冰川
    這個好,謝謝樓主!  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十一) [未登錄]
    2007-05-10 15:04 | aa
    不是說每次點一下么,怎么體現出點的阿??  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十一) [未登錄]
    2007-07-28 10:06 | 平平
    感謝樓主了,真的很不錯 啊  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十一)
    2007-09-20 17:55 | lanbaibai
    Override,應該是重寫,為什么樓主說是重載啊  回復  更多評論
      
    # re: SWT/Jface開發入門指南(十一)
    2008-03-09 23:21 | 網友
    抄襲,繼續抄  回復  更多評論
      
    主站蜘蛛池模板: 蜜桃AV无码免费看永久| 美美女高清毛片视频黄的一免费| 国产日韩AV免费无码一区二区三区| 色视频色露露永久免费观看| 亚洲熟妇无码AV| 毛片在线看免费版| 亚洲欧美国产国产综合一区| 成人毛片免费观看视频在线| 亚洲精品国产av成拍色拍| 免费鲁丝片一级在线观看| 亚洲AV无码一区二区大桥未久| 国产午夜免费秋霞影院| 高潮内射免费看片| 国产亚洲精品无码拍拍拍色欲 | 亚洲第一综合天堂另类专| 国产美女做a免费视频软件| 污污视频网站免费观看| 亚洲精品夜夜夜妓女网| 无码日韩精品一区二区三区免费| 亚洲高清无在码在线电影不卡| 在线视频免费观看高清| 自拍偷自拍亚洲精品播放| 亚洲伊人久久综合中文成人网| 99久久国产精品免费一区二区 | 日本亚洲免费无线码| 无码不卡亚洲成?人片| 一个人免费视频在线观看www| 亚洲精品中文字幕麻豆| 青青草国产免费久久久91| 香蕉免费一级视频在线观看| 久久久久亚洲av无码专区喷水| 蜜桃视频在线观看免费网址入口| 免费人成大片在线观看播放| 亚洲第一AAAAA片| 在线A级毛片无码免费真人| 国产高清对白在线观看免费91| 亚洲另类激情综合偷自拍| 日韩免费无码一区二区视频| 中文在线免费看视频| 亚洲国产综合精品中文第一| 中文字幕不卡亚洲|