我的JAVA窩! - BlogJava

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

          JFace中的工具條和菜單

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

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

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

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

          首先我們還是來寫一個(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:",?null,?null);
          15?????????if?(input.open()?==?Window.OK)?{
          16?????????????MessageDialog.openInformation(shell,?"Hello",?"Hello,?"
          17?????????????????????+?input.getValue()?+?"!");
          18?????????}
          19?
          20?????}
          21?
          22?}
          23?



          代碼段 17

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

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

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

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

          menubar.add(fileMenu);



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

          添加圖標(biāo)

          如果菜單只是文字還沒有什么,如果你的工具條都是文字是不是會(huì)顯得干巴巴的?其實(shí)只要我們?yōu)?/span> Action 設(shè)置 ImageDescriptor 就可以了,比如你可以自己畫一個(gè)圖標(biāo)保存到 Action 的包下面(我畫了一個(gè) 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è)置圖標(biāo)的。然后再運(yùn)行一下就會(huì)發(fā)現(xiàn)菜單和工具欄都有圖標(biāo)了。

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


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


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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 扶风县| 韶山市| 十堰市| 沽源县| 那坡县| 修武县| 齐齐哈尔市| 古交市| 寻乌县| 镇平县| 大同县| 盐池县| 三原县| 松原市| 乌鲁木齐县| 绍兴市| 沙坪坝区| 宜黄县| 永平县| 樟树市| 江津市| 德化县| 永胜县| 探索| 清丰县| 南雄市| 财经| 泗洪县| 潮安县| 汾西县| 东乡县| 孟津县| 钟山县| 开平市| 昌都县| 洪江市| 井研县| 济南市| 涞源县| 扶风县| 潍坊市|