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

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

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

    The Spark of Thinking

    Focus on Eclipse Tools.

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評論 :: 0 Trackbacks

    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 設置圖標的。然后再運行一下就會發現菜單和工具欄都有圖標了。

    在這里給一個社區做個廣告,大家可以登陸到在中國 eclipse 社區( http://www.eclipseworld.org ),在那里你也可以找到很多的幫助和支持,當然,你也可以在那里找到我。



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=523860

    [點擊此處收藏本文]?? 幻發表于 2005年11月06日 13:12:00
    posted on 2006-07-20 18:16 The Spark of Thinking 閱讀(254) 評論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 亚洲欧美熟妇综合久久久久 | 久久久久久精品免费免费自慰| 亚洲精品福利你懂| 亚洲自偷自偷图片| 四虎影视在线永久免费观看| 久久免费区一区二区三波多野| 免费国产黄网站在线看| 亚洲午夜理论片在线观看| 亚洲视频中文字幕在线| 亚洲色成人网站WWW永久| 可以免费观看的一级毛片| 大学生一级毛片免费看| 最近新韩国日本免费观看| 中文字幕一区二区免费| 日韩毛片在线免费观看| 亚洲第一成年网站视频 | 久久久久免费看黄A片APP| 亚洲午夜免费视频| 免费观看男人吊女人视频| 好湿好大好紧好爽免费视频| 色婷婷精品免费视频| 亚洲成AV人片在WWW| 亚洲日韩国产AV无码无码精品| 亚洲毛片在线免费观看| 久久亚洲精品成人AV| 亚洲av不卡一区二区三区| 亚洲产国偷V产偷V自拍色戒| 中文字幕在线亚洲精品| 亚洲人成网77777色在线播放| 亚洲日韩中文在线精品第一| 亚洲福利精品电影在线观看| 五月婷婷亚洲综合| 亚洲精品456播放| 国产亚洲精品无码专区| 奇米影视亚洲春色| 最新精品亚洲成a人在线观看| 久久久久亚洲AV综合波多野结衣| 亚洲日韩人妻第一页| 亚洲综合伊人久久综合| 亚洲成AV人片在线观看| 亚洲国产成人精品不卡青青草原|