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

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

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

    我的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 閱讀(348) 評論(0)  編輯  收藏


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


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

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: eeuss影院免费92242部| 亚洲精品精华液一区二区| 国产VA免费精品高清在线| 日韩a级毛片免费观看| 久久精品国产99国产精品亚洲| 69国产精品视频免费| 亚洲视频在线观看不卡| **aaaaa毛片免费| 精品亚洲国产成人| 在线不卡免费视频| 国产精品亚洲av色欲三区| 免费a级黄色毛片| 国产精品视频全国免费观看| 亚洲精品卡2卡3卡4卡5卡区| 97人妻精品全国免费视频 | 成年丰满熟妇午夜免费视频| 亚洲一区中文字幕在线观看| 毛片在线看免费版| 亚洲熟妇AV一区二区三区宅男| 国产成人免费手机在线观看视频| 粉色视频成年免费人15次| 亚洲人成中文字幕在线观看| 国产精品网站在线观看免费传媒| 亚洲黄网站wwwwww| 免费观看男人免费桶女人视频| 免费视频精品一区二区| 国产亚洲真人做受在线观看| **毛片免费观看久久精品| 亚洲av成人片在线观看| 亚洲一区二区女搞男| 国产成人精品免费视频网页大全| 亚洲精品无码专区在线播放| 亚洲男人在线无码视频| 午夜网站在线观看免费完整高清观看| 香蕉大伊亚洲人在线观看| 亚洲国产精品激情在线观看| 99精品视频免费观看| 亚洲av无码专区在线电影| 亚洲AV综合色区无码另类小说| 免费福利网站在线观看| 国产区在线免费观看|