<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)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久午夜夜伦鲁鲁片免费无码影视 | 亚洲av无码不卡久久| 日韩精品极品视频在线观看免费| 亚洲自偷自偷偷色无码中文| 国产精品免费在线播放| 免费国产高清视频| 国产一区二区三区亚洲综合| 国产精品免费小视频| 亚洲成av人片天堂网无码】| 日本免费网站在线观看| 老司机精品视频免费| 亚洲精品一级无码鲁丝片| 午夜不卡AV免费| 亚洲自偷自偷偷色无码中文| 国产成人精品无码免费看| 久久99亚洲网美利坚合众国| 在线观看的免费网站| 国内成人精品亚洲日本语音| 亚洲精品天堂成人片?V在线播放| 中文在线日本免费永久18近| 亚洲AV日韩精品久久久久久久 | 色视频色露露永久免费观看| 亚洲1区2区3区精华液| 亚洲国产精品综合久久一线 | CAOPORM国产精品视频免费| 亚洲日韩精品A∨片无码| 外国成人网在线观看免费视频| 久久亚洲精品成人无码网站| 波多野结衣免费在线观看| 亚洲性色AV日韩在线观看| 亚洲黄片手机免费观看| 日韩精品在线免费观看| 国产成人精品日本亚洲网址| 国产最新凸凹视频免费| 嫩草在线视频www免费看| 亚洲剧场午夜在线观看| 亚洲Av无码乱码在线播放| 97久久免费视频| 黄网站在线播放视频免费观看| 亚洲av色福利天堂| 国产免费怕怕免费视频观看|