幻境
          We are extremely fortunate not to know precisely the kind of world we live in
          posts - 22,comments - 39,trackbacks - 0
          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿(8)

          隨筆分類(20)

          隨筆檔案(22)

          相冊

          網(wǎng)友blog

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          JFace中的工具條和菜單

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

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

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

          我們這個程序?qū)懙煤苌担褪且粋€光禿禿的窗口上做了一個菜單和工具條按鈕,功能也只有一個,就是每次點一下,就彈出一個輸入框來問你名字是什么,然后顯示一個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類,沒有太多可說的。

          然后我們創(chuàng)建一個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兩個方法,它們的用途就和名字一樣,一個是用來創(chuàng)建菜單的,一個是用來創(chuàng)建工具條的。重載了這兩個方法以后,通過在構(gòu)造函數(shù)中調(diào)用addMenuBaraddToolBar讓工具條和菜單顯示出來。

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

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

          menubar.add(fileMenu);



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

          添加圖標

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

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



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

          結(jié)束語

          這一系列的文章陸陸續(xù)續(xù)寫到今天,也就寫完了。回頭看一下,雖然內(nèi)容都很淺顯,不過我覺得在swtJFace中文資料缺乏的今天,可能也可以給大家?guī)硪恍﹩⒌稀=窈笪疫€會寫一些eclipse平臺開發(fā)的文章,大家可以登陸到我的bloghttp://blog.csdn.net/jayliu)查看。

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

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

          FeedBack:
          # re: SWT/Jface開發(fā)入門指南(十一)
          2005-12-21 21:16 | unifly
          通俗易懂,不錯……  回復  更多評論
            
          # re: 介紹一下關(guān)于打印方面的例子
          2005-12-22 15:44 | 志強
          不錯,能不能介紹一下關(guān)于打印方面的例子,如何打印圖片。。。  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十一)
          2006-10-04 16:01 | 冰川
          這個好,謝謝樓主!  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十一) [未登錄]
          2007-05-10 15:04 | aa
          不是說每次點一下么,怎么體現(xiàn)出點的阿??  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十一) [未登錄]
          2007-07-28 10:06 | 平平
          感謝樓主了,真的很不錯 啊  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十一)
          2007-09-20 17:55 | lanbaibai
          Override,應該是重寫,為什么樓主說是重載啊  回復  更多評論
            
          # re: SWT/Jface開發(fā)入門指南(十一)
          2008-03-09 23:21 | 網(wǎng)友
          抄襲,繼續(xù)抄  回復  更多評論
            
          主站蜘蛛池模板: 富源县| 衡水市| 本溪市| 大港区| 砚山县| 天台县| 博爱县| 九龙县| 穆棱市| 乐业县| 屯门区| 馆陶县| 得荣县| 宜良县| 定结县| 侯马市| 黑山县| 额济纳旗| 郎溪县| 南康市| 朝阳市| 吕梁市| 博湖县| 上林县| 宜兴市| 河东区| 永兴县| 淮北市| 大埔区| 彝良县| 奉化市| 繁峙县| 东兰县| 孝义市| 黔江区| 舟曲县| 永和县| 霍林郭勒市| 延安市| 康乐县| 林芝县|