我的JAVA窩! - BlogJava

          SWT/JFace開發入門指南(十一)〈轉帖〉

          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:",?null,?null);
          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

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

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

          具體到菜單的創建,看了我們上面的代碼就很明白了,就直接調用相應 MenuManager add 方法把 action 添加上就可以了。 JFace 會自動找到這個 Action getText 方法設置菜單的文字。如果是有好幾層菜單,那么只要在重新 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 設置圖標的。然后再運行一下就會發現菜單和工具欄都有圖標了。

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


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


          網站導航:
           
          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 屏东市| 通道| 昂仁县| 天台县| 曲周县| 盐亭县| 常州市| 德保县| 龙井市| 双流县| 遵义县| 阳城县| 黔东| 海淀区| 水富县| 隆回县| 枞阳县| 永吉县| 嘉义市| 桂东县| 双峰县| 乌拉特后旗| 太仓市| 乌苏市| 东兰县| 克东县| 安龙县| 专栏| 宁远县| 柯坪县| 林甸县| 巴东县| 屏山县| 秦安县| 灌南县| 衡阳县| 成武县| 蒙山县| 田林县| 九江县| 岳西县|