<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評(píng)論 :: 0 Trackbacks

    JFace中的工具條和菜單

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

    JFace 里面,一個(gè) Action 可以對(duì)應(yīng)多個(gè) GUI 對(duì)象,這些對(duì)象就是所謂的 Contribution Item 。比如我們?cè)谝话愠绦蚶锩婧艹R姷摹拔募辈藛危旅娑紩?huì)有“新建”,“保存”等等。同時(shí)我們可以在工具條上放置相應(yīng)的按鈕,那么這些都是有相同的功能,在 JFace 里面我們可以只寫一個(gè) Action ,然后把它映射到不同的 ContributionItem 去,而不必為每個(gè)部件都寫一串處理事件。

    我們下面還是通過一個(gè)簡(jiǎn)單的例子來說明,在 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è)很簡(jiǎn)單的 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)對(duì)特定組件的管理(添加刪除等等)。

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

    menubar.add(fileMenu);



    至于工具條就更簡(jiǎn)單了,創(chuàng)建一個(gè) ToolBarManager 然后直接 add 對(duì)應(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)了。

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



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

    [點(diǎn)擊此處收藏本文]?? 幻發(fā)表于 2005年11月06日 13:12:00
    posted on 2006-07-20 18:16 The Spark of Thinking 閱讀(254) 評(píng)論(0)  編輯  收藏 所屬分類: SWT/JFace
    主站蜘蛛池模板: 免费看一级毛片在线观看精品视频| 国产gav成人免费播放视频| 特级毛片aaaa级毛片免费| 亚洲经典在线观看| 自拍偷自拍亚洲精品情侣| 日日AV拍夜夜添久久免费| A在线观看免费网站大全| 日本免费在线观看| 男女一进一出抽搐免费视频 | 久久亚洲AV成人无码国产电影| 亚洲免费在线播放| 日本红怡院亚洲红怡院最新| mm1313亚洲国产精品美女| 日韩精品成人无码专区免费| 99久久99久久精品免费观看| 两个人日本免费完整版在线观看1| 麻豆va在线精品免费播放| 亚洲乱码无人区卡1卡2卡3| 亚洲一区二区三区高清视频| 亚洲一二成人精品区| 亚洲国产精品嫩草影院在线观看 | 亚洲成A人片在线播放器| 亚洲成aⅴ人片在线影院八| 亚洲福利视频导航| 亚洲av无码成人黄网站在线观看| 亚洲色无码专区在线观看| 国产亚洲精品AA片在线观看不加载| 免费人成激情视频| 四虎永久免费观看| 免费人成网站在线高清| 无码专区一va亚洲v专区在线| 免费国产综合视频在线看| 免费在线观看毛片| 亚洲精品视频免费| 久久久青草青青国产亚洲免观 | 亚洲国产成人手机在线观看| 亚洲欧洲AV无码专区| 亚洲AV永久无码精品网站在线观看| 亚洲综合一区二区三区四区五区| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲日本VA午夜在线电影|